graceful-cluster
Advanced tools
Comparing version 0.0.1 to 0.0.2
@@ -18,2 +18,3 @@ var cluster = require('cluster'); | ||
- options.restartOnTimeout - ms, restart worker by timer. | ||
- options.workersCount - workers count, if not specified `os.cpus().length` will be used. | ||
@@ -40,2 +41,3 @@ Graceful restart performed by USR2 signal: | ||
var disableGraceful = options.disableGraceful; | ||
var workersCount = options.workersCount || numCPUs; | ||
@@ -45,3 +47,3 @@ if (cluster.isMaster) { | ||
var sigkill = false; | ||
var workersCount = 0; | ||
var currentWorkersCount = 0; | ||
var listeningWorkersCount = 0; | ||
@@ -53,3 +55,3 @@ var restartQueue = []; | ||
// Kill one worker only if maximum count are working. | ||
if (restartQueue.length > 0 && listeningWorkersCount === numCPUs) { | ||
if (restartQueue.length > 0 && listeningWorkersCount === workersCount) { | ||
var pid = restartQueue.shift(); | ||
@@ -80,3 +82,3 @@ try { | ||
// Fork workers. | ||
for (var i = 0; i < numCPUs; i++) { | ||
for (var i = 0; i < workersCount; i++) { | ||
fork(); | ||
@@ -87,7 +89,7 @@ } | ||
function checkIfNoWorkersAndExit() { | ||
if (!workersCount) { | ||
if (!currentWorkersCount) { | ||
log('Cluster graceful shutdown: done.'); | ||
process.exit(0); | ||
} else { | ||
log('Cluster graceful shutdown: wait ' + workersCount + ' worker' + (workersCount > 1 ? 's' : '') + '.'); | ||
log('Cluster graceful shutdown: wait ' + currentWorkersCount + ' worker' + (currentWorkersCount > 1 ? 's' : '') + '.'); | ||
} | ||
@@ -137,3 +139,3 @@ } | ||
cluster.on('fork', function(worker) { | ||
workersCount++; | ||
currentWorkersCount++; | ||
worker.on('listening', function() { | ||
@@ -148,3 +150,3 @@ listeningWorkersCount++; | ||
cluster.on('exit', function(worker, code, signal) { | ||
workersCount--; | ||
currentWorkersCount--; | ||
listeningWorkersCount--; | ||
@@ -203,2 +205,2 @@ if (sigkill) { | ||
}); | ||
}; | ||
}; |
{ | ||
"name": "graceful-cluster", | ||
"version": "0.0.1", | ||
"version": "0.0.2", | ||
"description": "Gracefully restart node.js http cluster with zero downtime. Shutdown server without active inbound connections reset.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -21,7 +21,7 @@ # Graceful cluster | ||
var GracefulServer = require('graceful-cluster').GracefulServer; | ||
new GracefulServer({ | ||
var gracefulServer = new GracefulServer({ | ||
server: listener, | ||
shutdownTimeout: 10 * 1000, // 10 sec. | ||
}); | ||
GracefulServer options description: | ||
@@ -32,4 +32,8 @@ | ||
- `shutdownTimeout` - ms, force worker shutdown on `SIGTERM` timeout. | ||
Also you can initiate graceful shutdown when needed: | ||
gracefulServer.shutdown(); | ||
### 2. Use simplified cluster initialization. | ||
### 2. Use simplified cluster initialization | ||
@@ -68,2 +72,3 @@ This cluster wrapper will send `SIGTERM` signal to workers and wait till they finished all requests. | ||
- `restartOnTimeout` - ms, restart worker by timer. | ||
- `workersCount` - workers count, if not specified `os.cpus().length` will be used. | ||
@@ -70,0 +75,0 @@ ### Gracefully restart cluster |
220
80
13419
7