mirror of
https://github.com/nodejs/node.git
synced 2026-10-14 10:26:26 -04:00
cluster: fix cluster rr distribute error
PR-URL: https://github.com/nodejs/node/pull/44202 Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
1 parent
b5300855cc
commit
547f453491
2 files changed
+34
No files matched your search
@@ -98,6 +98,10 @@ RoundRobinHandle.prototype.remove = function(worker) {
|
||||
};
|
||||
|
||||
RoundRobinHandle.prototype.distribute = function(err, handle) {
|
||||
// If `accept` fails just skip it (handle is undefined)
|
||||
if (err) {
|
||||
return;
|
||||
}
|
||||
append(this.handles, handle);
|
||||
// eslint-disable-next-line node-core/no-array-destructuring
|
||||
const [ workerEntry ] = this.free; // this.free is a SafeMap
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
// Flags: --expose-internals
|
||||
'use strict';
|
||||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const net = require('net');
|
||||
const cluster = require('cluster');
|
||||
const rr = require('internal/cluster/round_robin_handle');
|
||||
|
||||
if (cluster.isPrimary) {
|
||||
const distribute = rr.prototype.distribute;
|
||||
rr.prototype.distribute = function(err, handle) {
|
||||
assert.strictEqual(err, 0);
|
||||
handle.close();
|
||||
distribute.call(this, -1, undefined);
|
||||
};
|
||||
cluster.schedulingPolicy = cluster.SCHED_RR;
|
||||
cluster.fork();
|
||||
} else {
|
||||
const server = net.createServer(common.mustNotCall());
|
||||
server.listen(0, common.mustCall(() => {
|
||||
|
||||
const socket = net.connect(server.address().port);
|
||||
|
||||
socket.on('close', common.mustCall(() => {
|
||||
server.close(common.mustCall(() => {
|
||||
process.disconnect();
|
||||
}));
|
||||
}));
|
||||
}));
|
||||
}
|
||||
Reference in new issue
Block a user