Skip to content

Commit 96d1316

Browse files
MoLowrichardlau
authored andcommitted
cluster: use inspector utils
PR-URL: #44592 Backport-PR-URL: #44873 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
1 parent 02a18ea commit 96d1316

File tree

2 files changed

+20
-36
lines changed

2 files changed

+20
-36
lines changed

lib/internal/cluster/primary.js

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@ const {
66
ArrayPrototypeSome,
77
ObjectKeys,
88
ObjectValues,
9-
RegExpPrototypeExec,
109
SafeMap,
1110
StringPrototypeStartsWith,
1211
} = primordials;
12+
const {
13+
codes: {
14+
ERR_SOCKET_BAD_PORT,
15+
}
16+
} = require('internal/errors');
1317

1418
const assert = require('internal/assert');
1519
const { fork } = require('child_process');
@@ -18,14 +22,12 @@ const EventEmitter = require('events');
1822
const RoundRobinHandle = require('internal/cluster/round_robin_handle');
1923
const SharedHandle = require('internal/cluster/shared_handle');
2024
const Worker = require('internal/cluster/worker');
25+
const { getInspectPort, isUsingInspector } = require('internal/util/inspector');
2126
const { internal, sendHelper } = require('internal/cluster/utils');
2227
const cluster = new EventEmitter();
2328
const intercom = new EventEmitter();
2429
const SCHED_NONE = 1;
2530
const SCHED_RR = 2;
26-
const minPort = 1024;
27-
const maxPort = 65535;
28-
const { validatePort } = require('internal/validators');
2931

3032
module.exports = cluster;
3133

@@ -40,7 +42,6 @@ cluster.SCHED_NONE = SCHED_NONE; // Leave it to the operating system.
4042
cluster.SCHED_RR = SCHED_RR; // Primary distributes connections.
4143

4244
let ids = 0;
43-
let debugPortOffset = 1;
4445
let initialized = false;
4546

4647
// XXX(bnoordhuis) Fold cluster.schedulingPolicy into cluster.settings?
@@ -117,29 +118,12 @@ function setupSettingsNT(settings) {
117118
function createWorkerProcess(id, env) {
118119
const workerEnv = { ...process.env, ...env, NODE_UNIQUE_ID: `${id}` };
119120
const execArgv = [...cluster.settings.execArgv];
120-
const debugArgRegex = /--inspect(?:-brk|-port)?|--debug-port/;
121-
const nodeOptions = process.env.NODE_OPTIONS || '';
122-
123-
// TODO(MoLow): Use getInspectPort from internal/util/inspector
124-
if (ArrayPrototypeSome(execArgv,
125-
(arg) => RegExpPrototypeExec(debugArgRegex, arg) !== null) ||
126-
RegExpPrototypeExec(debugArgRegex, nodeOptions) !== null) {
127-
let inspectPort;
128-
if ('inspectPort' in cluster.settings) {
129-
if (typeof cluster.settings.inspectPort === 'function')
130-
inspectPort = cluster.settings.inspectPort();
131-
else
132-
inspectPort = cluster.settings.inspectPort;
133-
134-
validatePort(inspectPort);
135-
} else {
136-
inspectPort = process.debugPort + debugPortOffset;
137-
if (inspectPort > maxPort)
138-
inspectPort = inspectPort - maxPort + minPort - 1;
139-
debugPortOffset++;
140-
}
141121

142-
ArrayPrototypePush(execArgv, `--inspect-port=${inspectPort}`);
122+
if (cluster.settings.inspectPort === null) {
123+
throw new ERR_SOCKET_BAD_PORT('Port', null, true);
124+
}
125+
if (isUsingInspector(cluster.settings.execArgv)) {
126+
ArrayPrototypePush(execArgv, `--inspect-port=${getInspectPort(cluster.settings.inspectPort)}`);
143127
}
144128

145129
return fork(cluster.settings.exec, cluster.settings.args, {

lib/internal/util/inspector.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const {
88
ObjectKeys,
99
ObjectPrototypeHasOwnProperty,
1010
RegExpPrototypeExec,
11+
SafeWeakMap,
1112
} = primordials;
1213

1314
const { validatePort } = require('internal/validators');
@@ -17,19 +18,18 @@ const kMaxPort = 65535;
1718
const kInspectArgRegex = /--inspect(?:-brk|-port)?|--debug-port/;
1819
const kInspectMsgRegex = /Debugger listening on ws:\/\/\[?(.+?)\]?:(\d+)\/|Debugger attached|Waiting for the debugger to disconnect\.\.\./;
1920

20-
let _isUsingInspector;
21-
function isUsingInspector() {
22-
_isUsingInspector ??=
23-
ArrayPrototypeSome(process.execArgv, (arg) => RegExpPrototypeExec(kInspectArgRegex, arg) !== null) ||
24-
RegExpPrototypeExec(kInspectArgRegex, process.env.NODE_OPTIONS) !== null;
25-
return _isUsingInspector;
21+
const _isUsingInspector = new SafeWeakMap();
22+
function isUsingInspector(execArgv = process.execArgv) {
23+
if (!_isUsingInspector.has(execArgv)) {
24+
_isUsingInspector.set(execArgv,
25+
ArrayPrototypeSome(execArgv, (arg) => RegExpPrototypeExec(kInspectArgRegex, arg) !== null) ||
26+
RegExpPrototypeExec(kInspectArgRegex, process.env.NODE_OPTIONS) !== null);
27+
}
28+
return _isUsingInspector.get(execArgv);
2629
}
2730

2831
let debugPortOffset = 1;
2932
function getInspectPort(inspectPort) {
30-
if (!isUsingInspector()) {
31-
return null;
32-
}
3333
if (typeof inspectPort === 'function') {
3434
inspectPort = inspectPort();
3535
} else if (inspectPort == null) {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy