Browse Source

cluster: rename worker.unqiueID to worker.id

v0.9.1-release
Andreas Madsen 13 years ago
committed by isaacs
parent
commit
c2c08196d8
  1. 34
      doc/api/cluster.markdown
  2. 17
      lib/cluster.js
  3. 1
      test/simple/test-cluster-basic.js

34
doc/api/cluster.markdown

@ -128,13 +128,13 @@ This can be used to log worker activity, and create you own timeout.
} }
cluster.on('fork', function(worker) { cluster.on('fork', function(worker) {
timeouts[worker.uniqueID] = setTimeout(errorMsg, 2000); timeouts[worker.id] = setTimeout(errorMsg, 2000);
}); });
cluster.on('listening', function(worker, address) { cluster.on('listening', function(worker, address) {
clearTimeout(timeouts[worker.uniqueID]); clearTimeout(timeouts[worker.id]);
}); });
cluster.on('exit', function(worker, code, signal) { cluster.on('exit', function(worker, code, signal) {
clearTimeout(timeouts[worker.uniqueID]); clearTimeout(timeouts[worker.id]);
errorMsg(); errorMsg();
}); });
@ -183,13 +183,13 @@ the process is stuck in a cleanup or if there are long-living
connections. connections.
cluster.on('disconnect', function(worker) { cluster.on('disconnect', function(worker) {
console.log('The worker #' + worker.uniqueID + ' has disconnected'); console.log('The worker #' + worker.id + ' has disconnected');
}); });
## Event: 'exit' ## Event: 'exit'
* `worker` {Worker object} * `worker` {Worker object}
* `code` {Number} the exit code, if it exited normally. * `code` {Number} the exit code, if it exited normally.
* `signal` {String} the name of the signal (eg. `'SIGHUP'`) that caused * `signal` {String} the name of the signal (eg. `'SIGHUP'`) that caused
the process to be killed. the process to be killed.
@ -266,12 +266,12 @@ The method takes an optional callback argument which will be called when finishe
* {Object} * {Object}
In the cluster all living worker objects are stored in this object by there In the cluster all living worker objects are stored in this object by there
`uniqueID` as the key. This makes it easy to loop through all living workers. `id` as the key. This makes it easy to loop through all living workers.
// Go through all workers // Go through all workers
function eachWorker(callback) { function eachWorker(callback) {
for (var uniqueID in cluster.workers) { for (var id in cluster.workers) {
callback(cluster.workers[uniqueID]); callback(cluster.workers[id]);
} }
} }
eachWorker(function(worker) { eachWorker(function(worker) {
@ -279,10 +279,10 @@ In the cluster all living worker objects are stored in this object by there
}); });
Should you wish to reference a worker over a communication channel, using Should you wish to reference a worker over a communication channel, using
the worker's uniqueID is the easiest way to find the worker. the worker's unique id is the easiest way to find the worker.
socket.on('data', function(uniqueID) { socket.on('data', function(id) {
var worker = cluster.workers[uniqueID]; var worker = cluster.workers[id];
}); });
## Class: Worker ## Class: Worker
@ -291,12 +291,12 @@ A Worker object contains all public information and method about a worker.
In the master it can be obtained using `cluster.workers`. In a worker In the master it can be obtained using `cluster.workers`. In a worker
it can be obtained using `cluster.worker`. it can be obtained using `cluster.worker`.
### worker.uniqueID ### worker.id
* {String} * {String}
Each new worker is given its own unique id, this id is stored in the Each new worker is given its own unique id, this id is stored in the
`uniqueID`. `id`.
While a worker is alive, this is the key that indexes it in While a worker is alive, this is the key that indexes it in
cluster.workers cluster.workers
@ -434,8 +434,8 @@ in the master process using the message system:
// Start workers and listen for messages containing notifyRequest // Start workers and listen for messages containing notifyRequest
cluster.autoFork(); cluster.autoFork();
Object.keys(cluster.workers).forEach(function(uniqueID) { Object.keys(cluster.workers).forEach(function(id) {
cluster.workers[uniqueID].on('message', messageHandler); cluster.workers[id].on('message', messageHandler);
}); });
} else { } else {
@ -481,12 +481,12 @@ on the specified worker.
### Event: 'exit' ### Event: 'exit'
* `code` {Number} the exit code, if it exited normally. * `code` {Number} the exit code, if it exited normally.
* `signal` {String} the name of the signal (eg. `'SIGHUP'`) that caused * `signal` {String} the name of the signal (eg. `'SIGHUP'`) that caused
the process to be killed. the process to be killed.
Emitted by the individual worker instance, when the underlying child process Emitted by the individual worker instance, when the underlying child process
is terminated. See [child_process event: 'exit'](child_process.html#child_process_event_exit). is terminated. See [child_process event: 'exit'](child_process.html#child_process_event_exit).
var worker = cluster.fork(); var worker = cluster.fork();
worker.on('exit', function(code, signal) { worker.on('exit', function(code, signal) {

17
lib/cluster.js

@ -258,8 +258,11 @@ function Worker(customEnv) {
var self = this; var self = this;
var env = process.env; var env = process.env;
// Assign uniqueID, default null // Assign a unique id, default null
this.uniqueID = cluster.isMaster ? ++ids : toDecInt(env.NODE_UNIQUE_ID); this.id = cluster.isMaster ? ++ids : toDecInt(env.NODE_UNIQUE_ID);
// XXX: Legacy. Remove in 0.9
this.workerID = this.uniqueID = this.id;
// Assign state // Assign state
this.state = 'none'; this.state = 'none';
@ -268,9 +271,9 @@ function Worker(customEnv) {
if (cluster.isMaster) { if (cluster.isMaster) {
// Create env object // Create env object
// first: copy and add uniqueID // first: copy and add id property
var envCopy = util._extend({}, env); var envCopy = util._extend({}, env);
envCopy['NODE_UNIQUE_ID'] = this.uniqueID; envCopy['NODE_UNIQUE_ID'] = this.id;
// second: extend envCopy with the env argument // second: extend envCopy with the env argument
if (isObject(customEnv)) { if (isObject(customEnv)) {
envCopy = util._extend(envCopy, customEnv); envCopy = util._extend(envCopy, customEnv);
@ -288,7 +291,7 @@ function Worker(customEnv) {
if (cluster.isMaster) { if (cluster.isMaster) {
// Save worker in the cluster.workers array // Save worker in the cluster.workers array
cluster.workers[this.uniqueID] = this; cluster.workers[this.id] = this;
// Emit a fork event, on next tick // Emit a fork event, on next tick
// There is no worker.fork event since this has no real purpose // There is no worker.fork event since this has no real purpose
@ -328,7 +331,7 @@ function prepareExit(worker, state) {
// Remove from workers in the master // Remove from workers in the master
if (cluster.isMaster) { if (cluster.isMaster) {
delete cluster.workers[worker.uniqueID]; delete cluster.workers[worker.id];
} }
} }
@ -350,7 +353,7 @@ function sendInternalMessage(worker, message/*, handler, callback*/) {
// Store callback for later // Store callback for later
if (callback) { if (callback) {
message._requestEcho = worker.uniqueID + ':' + (++queryIds); message._requestEcho = worker.id + ':' + (++queryIds);
queryCallbacks[message._requestEcho] = callback; queryCallbacks[message._requestEcho] = callback;
} }

1
test/simple/test-cluster-basic.js

@ -112,6 +112,7 @@ else if (cluster.isMaster) {
//Create worker //Create worker
worker = cluster.fork(); worker = cluster.fork();
assert.equal(worker.id, 1);
assert.ok(worker instanceof cluster.Worker, assert.ok(worker instanceof cluster.Worker,
'the worker is not a instance of the Worker constructor'); 'the worker is not a instance of the Worker constructor');

Loading…
Cancel
Save