zero downtime and reload support with cluster module

This commit is contained in:
Julian Lam
2014-09-04 17:09:57 -04:00
parent 3918b29233
commit 08abbe19bc
7 changed files with 65 additions and 24 deletions

View File

@@ -40,7 +40,7 @@ var async = require('async'),
emitter.emit('nodebb:ready');
}
callback.apply(null, arguments);
if (callback) callback.apply(null, arguments);
});
});
};

View File

@@ -5,6 +5,7 @@ var mkdirp = require('mkdirp'),
path = require('path'),
fs = require('fs'),
nconf = require('nconf'),
cluster = require('cluster'),
emitter = require('../emitter'),
plugins = require('../plugins'),
@@ -13,6 +14,16 @@ var mkdirp = require('mkdirp'),
Templates = {};
Templates.compile = function(callback) {
if (cluster.isWorker && process.env.cluster_setup !== 'true') {
return setTimeout(function() {
console.log('FAKING TEMPLATE COMPILE');
emitter.emit('templates:compiled');
if (callback) callback();
}, 1000);
} else {
console.log('REAL TEMPLATE COMPILE');
}
var baseTemplatesPath = nconf.get('base_templates_path'),
viewsPath = nconf.get('views_dir'),
themeTemplatesPath = nconf.get('theme_templates_path');

View File

@@ -128,14 +128,7 @@ module.exports = function(app, data) {
routeCurrentTheme(app, data.currentThemeId, data.themesData);
routeThemeScreenshots(app, data.themesData);
if (process.env.cluster_setup === 'true') {
meta.templates.compile();
} else {
setTimeout(function() {
emitter.emit('templates:compiled');
}, 1000);
}
meta.templates.compile();
return middleware;
};

View File

@@ -14,6 +14,7 @@ var groups = require('../groups'),
async = require('async'),
winston = require('winston'),
index = require('./index'),
cluster = require('cluster'),
SocketAdmin = {
user: require('./admin/user'),
@@ -39,7 +40,13 @@ SocketAdmin.before = function(socket, method, next) {
};
SocketAdmin.reload = function(socket, data, callback) {
meta.reload(callback);
if (cluster.isWorker) {
process.send({
action: 'reload'
});
} else {
meta.reload(callback);
}
};
SocketAdmin.restart = function(socket, data, callback) {

View File

@@ -41,7 +41,7 @@ if(nconf.get('ssl')) {
emailer.registerApp(app);
notifications.init();
if (process.env.cluster_setup === 'true') {
if (cluster.isWorker && process.env.cluster_setup === 'true') {
user.startJobs();
}
@@ -50,7 +50,7 @@ if(nconf.get('ssl')) {
meta.js.minify(app.enabled('minification'));
meta.css.minify();
if (process.env.cluster_setup === 'true') {
if (cluster.isWorker && process.env.cluster_setup === 'true') {
meta.sounds.init();
}
});