cluster: add support for NODE_OPTIONS="--inspect"
When using cluster and --inspect as cli argument it is correctly handled and each worker will use a different port, this was fixed by #13619. But when env var NODE_OPTIONS="--inspect" is set this logic doesn't apply and the workers will fail as they try to attach to the same port. Fixes: https://github.com/nodejs/node/issues/19026 PR-URL: https://github.com/nodejs/node/pull/19165 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com>
This commit is contained in:
parent
6a9f049968
commit
9b34ea6161
@ -103,11 +103,14 @@ function createWorkerProcess(id, env) {
|
|||||||
const workerEnv = util._extend({}, process.env);
|
const workerEnv = util._extend({}, process.env);
|
||||||
const execArgv = cluster.settings.execArgv.slice();
|
const execArgv = cluster.settings.execArgv.slice();
|
||||||
const debugArgRegex = /--inspect(?:-brk|-port)?|--debug-port/;
|
const debugArgRegex = /--inspect(?:-brk|-port)?|--debug-port/;
|
||||||
|
const nodeOptions = process.env.NODE_OPTIONS ?
|
||||||
|
process.env.NODE_OPTIONS : '';
|
||||||
|
|
||||||
util._extend(workerEnv, env);
|
util._extend(workerEnv, env);
|
||||||
workerEnv.NODE_UNIQUE_ID = '' + id;
|
workerEnv.NODE_UNIQUE_ID = '' + id;
|
||||||
|
|
||||||
if (execArgv.some((arg) => arg.match(debugArgRegex))) {
|
if (execArgv.some((arg) => arg.match(debugArgRegex)) ||
|
||||||
|
nodeOptions.match(debugArgRegex)) {
|
||||||
let inspectPort;
|
let inspectPort;
|
||||||
if ('inspectPort' in cluster.settings) {
|
if ('inspectPort' in cluster.settings) {
|
||||||
if (typeof cluster.settings.inspectPort === 'function')
|
if (typeof cluster.settings.inspectPort === 'function')
|
||||||
|
30
test/parallel/test-inspect-support-for-node_options.js
Normal file
30
test/parallel/test-inspect-support-for-node_options.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
'use strict';
|
||||||
|
const common = require('../common');
|
||||||
|
const cluster = require('cluster');
|
||||||
|
const assert = require('assert');
|
||||||
|
|
||||||
|
common.skipIfInspectorDisabled();
|
||||||
|
|
||||||
|
checkForInspectSupport('--inspect');
|
||||||
|
|
||||||
|
function checkForInspectSupport(flag) {
|
||||||
|
|
||||||
|
const nodeOptions = JSON.stringify(flag);
|
||||||
|
const numWorkers = 2;
|
||||||
|
process.env.NODE_OPTIONS = flag;
|
||||||
|
|
||||||
|
if (cluster.isMaster) {
|
||||||
|
for (let i = 0; i < numWorkers; i++) {
|
||||||
|
cluster.fork();
|
||||||
|
}
|
||||||
|
|
||||||
|
cluster.on('online', (worker) => {
|
||||||
|
worker.disconnect();
|
||||||
|
});
|
||||||
|
|
||||||
|
cluster.on('exit', common.mustCall((worker, code, signal) => {
|
||||||
|
const errMsg = `For NODE_OPTIONS ${nodeOptions}, failed to start cluster`;
|
||||||
|
assert.strictEqual(worker.exitedAfterDisconnect, true, errMsg);
|
||||||
|
}, numWorkers));
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user