mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-10 07:55:46 +01:00
cleanly shutdown
wait for webserver to stop accepting connections destroy current connections wait for db connection to close
This commit is contained in:
@@ -264,7 +264,9 @@ function getCollectionStats(db, callback) {
|
||||
|
||||
mongoModule.close = function (callback) {
|
||||
callback = callback || function () {};
|
||||
db.close(callback);
|
||||
db.close(function (err) {
|
||||
callback(err);
|
||||
});
|
||||
};
|
||||
|
||||
mongoModule.socketAdapter = function () {
|
||||
|
||||
@@ -146,7 +146,9 @@ redisModule.checkCompatibilityVersion = function (version, callback) {
|
||||
|
||||
redisModule.close = function (callback) {
|
||||
callback = callback || function () {};
|
||||
redisClient.quit(callback);
|
||||
redisClient.quit(function (err) {
|
||||
callback(err);
|
||||
});
|
||||
};
|
||||
|
||||
redisModule.info = function (cxn, callback) {
|
||||
|
||||
24
src/start.js
24
src/start.js
@@ -153,11 +153,21 @@ function restart() {
|
||||
|
||||
function shutdown(code) {
|
||||
winston.info('[app] Shutdown (SIGTERM/SIGINT) Initialised.');
|
||||
require('./database').close();
|
||||
winston.info('[app] Database connection closed.');
|
||||
require('./webserver').server.close();
|
||||
winston.info('[app] Web server closed to connections.');
|
||||
|
||||
winston.info('[app] Shutdown complete.');
|
||||
process.exit(code || 0);
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
require('./webserver').destroy(next);
|
||||
},
|
||||
function (next) {
|
||||
winston.info('[app] Web server closed to connections.');
|
||||
require('./database').close(next);
|
||||
},
|
||||
], function (err) {
|
||||
if (err) {
|
||||
winston.error(err);
|
||||
return process.exit(code || 0);
|
||||
}
|
||||
winston.info('[app] Database connection closed.');
|
||||
winston.info('[app] Shutdown complete.');
|
||||
process.exit(code || 0);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -55,6 +55,25 @@ server.on('error', function (err) {
|
||||
throw err;
|
||||
});
|
||||
|
||||
// see https://github.com/isaacs/server-destroy/blob/master/index.js
|
||||
var connections = {};
|
||||
server.on('connection', function (conn) {
|
||||
var key = conn.remoteAddress + ':' + conn.remotePort;
|
||||
connections[key] = conn;
|
||||
conn.on('close', function () {
|
||||
delete connections[key];
|
||||
});
|
||||
});
|
||||
|
||||
module.exports.destroy = function (callback) {
|
||||
server.close(callback);
|
||||
for (var key in connections) {
|
||||
if (connections.hasOwnProperty(key)) {
|
||||
connections[key].destroy();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports.listen = function (callback) {
|
||||
callback = callback || function () { };
|
||||
emailer.registerApp(app);
|
||||
@@ -250,7 +269,7 @@ function setupAutoLocale(app, callback) {
|
||||
function listen(callback) {
|
||||
callback = callback || function () { };
|
||||
var port = nconf.get('port');
|
||||
var isSocket = isNaN(port);
|
||||
var isSocket = isNaN(port) && !Array.isArray(port);
|
||||
var socketPath = isSocket ? nconf.get('port') : '';
|
||||
|
||||
if (Array.isArray(port)) {
|
||||
|
||||
Reference in New Issue
Block a user