cleanly shutdown

wait for webserver to stop accepting connections
destroy current connections
wait for db connection to close
v1.18.x
Barış Soner Uşaklı 7 years ago
parent 1d42d1a6d2
commit 77d47b31fb

@ -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) {

@ -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)) {

Loading…
Cancel
Save