Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7fb9cc7

Browse filesBrowse files
MoLowdanielleadams
authored andcommitted
cluster: use inspector utils
PR-URL: #44592 Backport-PR-URL: #44813 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
1 parent 3c1e9d4 commit 7fb9cc7
Copy full SHA for 7fb9cc7

File tree

Expand file treeCollapse file tree

2 files changed

+20
-36
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+20
-36
lines changed
Open diff view settings
Collapse file

‎lib/internal/cluster/primary.js‎

Copy file name to clipboardExpand all lines: lib/internal/cluster/primary.js
+11-27Lines 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, {
Collapse file

‎lib/internal/util/inspector.js‎

Copy file name to clipboardExpand all lines: lib/internal/util/inspector.js
+9-9Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.