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) {
|
mongoModule.close = function (callback) {
|
||||||
callback = callback || function () {};
|
callback = callback || function () {};
|
||||||
db.close(callback);
|
db.close(function (err) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
mongoModule.socketAdapter = function () {
|
mongoModule.socketAdapter = function () {
|
||||||
|
|||||||
@@ -146,7 +146,9 @@ redisModule.checkCompatibilityVersion = function (version, callback) {
|
|||||||
|
|
||||||
redisModule.close = function (callback) {
|
redisModule.close = function (callback) {
|
||||||
callback = callback || function () {};
|
callback = callback || function () {};
|
||||||
redisClient.quit(callback);
|
redisClient.quit(function (err) {
|
||||||
|
callback(err);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
redisModule.info = function (cxn, callback) {
|
redisModule.info = function (cxn, callback) {
|
||||||
|
|||||||
24
src/start.js
24
src/start.js
@@ -153,11 +153,21 @@ function restart() {
|
|||||||
|
|
||||||
function shutdown(code) {
|
function shutdown(code) {
|
||||||
winston.info('[app] Shutdown (SIGTERM/SIGINT) Initialised.');
|
winston.info('[app] Shutdown (SIGTERM/SIGINT) Initialised.');
|
||||||
require('./database').close();
|
async.waterfall([
|
||||||
winston.info('[app] Database connection closed.');
|
function (next) {
|
||||||
require('./webserver').server.close();
|
require('./webserver').destroy(next);
|
||||||
winston.info('[app] Web server closed to connections.');
|
},
|
||||||
|
function (next) {
|
||||||
winston.info('[app] Shutdown complete.');
|
winston.info('[app] Web server closed to connections.');
|
||||||
process.exit(code || 0);
|
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;
|
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) {
|
module.exports.listen = function (callback) {
|
||||||
callback = callback || function () { };
|
callback = callback || function () { };
|
||||||
emailer.registerApp(app);
|
emailer.registerApp(app);
|
||||||
@@ -250,7 +269,7 @@ function setupAutoLocale(app, callback) {
|
|||||||
function listen(callback) {
|
function listen(callback) {
|
||||||
callback = callback || function () { };
|
callback = callback || function () { };
|
||||||
var port = nconf.get('port');
|
var port = nconf.get('port');
|
||||||
var isSocket = isNaN(port);
|
var isSocket = isNaN(port) && !Array.isArray(port);
|
||||||
var socketPath = isSocket ? nconf.get('port') : '';
|
var socketPath = isSocket ? nconf.get('port') : '';
|
||||||
|
|
||||||
if (Array.isArray(port)) {
|
if (Array.isArray(port)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user