Skip to content

Commit 810f29f

Browse files
evanlucasjasnell
authored andcommitted
cluster: alias suicide to exitedAfterDisconnect
This is a backport of 4f619bd which migrates from worker.suicide to worker.exitedAfterDisconnect. Refs: #3743 PR-URL: #7998 Reviewed-By: Сковорода Никита Андреевич <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Myles Borins <[email protected]>
1 parent d771d5e commit 810f29f

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

doc/api/cluster.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,29 @@ if (cluster.isMaster) {
292292
}
293293
```
294294

295+
### worker.exitedAfterDisconnect
296+
297+
* {Boolean}
298+
299+
Alias to [`worker.suicide`][].
300+
301+
Set by calling `.kill()` or `.disconnect()`, until then it is `undefined`.
302+
303+
The boolean `worker.exitedAfterDisconnect` lets you distinguish between
304+
voluntary and accidental exit, the master may choose not to respawn a worker
305+
based on this value.
306+
307+
```js
308+
cluster.on('exit', (worker, code, signal) => {
309+
if (worker.exitedAfterDisconnect === true) {
310+
console.log('The worker exited after disconnect.').
311+
}
312+
});
313+
314+
// kill worker
315+
worker.kill();
316+
```
317+
295318
### worker.id
296319

297320
* {Number}
@@ -690,3 +713,4 @@ socket.on('data', (id) => {
690713
[child_process event: 'exit']: child_process.html#child_process_event_exit
691714
[child_process event: 'message']: child_process.html#child_process_event_message
692715
[`process` event: `'message'`]: process.html#process_event_message
716+
[`worker.suicide`]: #cluster_worker_suicide

lib/cluster.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ function Worker(options) {
3131
this.state = options.state || 'none';
3232
this.id = options.id | 0;
3333

34+
Object.defineProperty(this, 'exitedAfterDisconnect', {
35+
get: function() {
36+
return this.suicide;
37+
},
38+
set: function(val) {
39+
this.suicide = val;
40+
},
41+
enumerable: true
42+
});
43+
3444
if (options.process) {
3545
this.process = options.process;
3646
this.process.on('error', (code, signal) =>

test/parallel/test-cluster-worker-constructor.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ var worker;
99

1010
worker = new cluster.Worker();
1111
assert.equal(worker.suicide, undefined);
12+
assert.equal(worker.exitedAfterDisconnect, undefined);
1213
assert.equal(worker.state, 'none');
1314
assert.equal(worker.id, 0);
1415
assert.equal(worker.process, undefined);
@@ -19,6 +20,7 @@ worker = new cluster.Worker({
1920
process: process
2021
});
2122
assert.equal(worker.suicide, undefined);
23+
assert.equal(worker.exitedAfterDisconnect, undefined);
2224
assert.equal(worker.state, 'online');
2325
assert.equal(worker.id, 3);
2426
assert.equal(worker.process, process);

test/parallel/test-cluster-worker-exit.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ if (cluster.isWorker) {
3232
worker_emitExit: [1, "the worker did not emit 'exit'"],
3333
worker_state: ['disconnected', 'the worker state is incorrect'],
3434
worker_suicideMode: [false, 'the worker.suicide flag is incorrect'],
35+
worker_exitedAfterDisconnect: [false,
36+
'the .exitedAfterDisconnect flag is incorrect'],
3537
worker_died: [true, 'the worker is still running'],
3638
worker_exitCode: [EXIT_CODE, 'the worker exited w/ incorrect exitCode'],
3739
worker_signalCode: [null, 'the worker exited w/ incorrect signalCode']
@@ -66,6 +68,8 @@ if (cluster.isWorker) {
6668
worker.on('disconnect', function() {
6769
results.worker_emitDisconnect += 1;
6870
results.worker_suicideMode = worker.suicide;
71+
results.worker_exitedAfterDisconnect = worker.exitedAfterDisconnect;
72+
assert.strictEqual(worker.suicide, worker.exitedAfterDisconnect);
6973
results.worker_state = worker.state;
7074
if (results.worker_emitExit > 0) {
7175
process.nextTick(function() { finish_test(); });

0 commit comments

Comments
 (0)