Skip to content

Commit 5eb48b6

Browse files
MoLowRafaelGSS
authored andcommitted
cluster: use inspector utils
PR-URL: #44592 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
1 parent 70ccc5e commit 5eb48b6

2 files changed

Lines changed: 20 additions & 36 deletions

File tree

‎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
constassert=require('internal/assert');
1519
const{ fork }=require('child_process');
@@ -18,14 +22,12 @@ const EventEmitter = require('events');
1822
constRoundRobinHandle=require('internal/cluster/round_robin_handle');
1923
constSharedHandle=require('internal/cluster/shared_handle');
2024
constWorker=require('internal/cluster/worker');
25+
const{ getInspectPort, isUsingInspector }=require('internal/util/inspector');
2126
const{ internal, sendHelper }=require('internal/cluster/utils');
2227
constcluster=newEventEmitter();
2328
constintercom=newEventEmitter();
2429
constSCHED_NONE=1;
2530
constSCHED_RR=2;
26-
constminPort=1024;
27-
constmaxPort=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
letids=0;
43-
letdebugPortOffset=1;
4445
letinitialized=false;
4546

4647
// XXX(bnoordhuis) Fold cluster.schedulingPolicy into cluster.settings?
@@ -117,29 +118,12 @@ function setupSettingsNT(settings) {
117118
functioncreateWorkerProcess(id,env){
118119
constworkerEnv={ ...process.env, ...env,NODE_UNIQUE_ID: `${id}`};
119120
constexecArgv=[...cluster.settings.execArgv];
120-
constdebugArgRegex=/--inspect(?:-brk|-port)?|--debug-port/;
121-
constnodeOptions=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-
letinspectPort;
128-
if('inspectPort'incluster.settings){
129-
if(typeofcluster.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+
thrownewERR_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
returnfork(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
constkInspectArgRegex=/--inspect(?:-brk|-port)?|--debug-port/;
1819
constkInspectMsgRegex=/Debuggerlisteningonws:\/\/\[?(.+?)\]?:(\d+)\/|Debuggerattached|Waitingforthedebuggertodisconnect\.\.\./;
1920

20-
let_isUsingInspector;
21-
functionisUsingInspector(){
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=newSafeWeakMap();
22+
functionisUsingInspector(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
letdebugPortOffset=1;
2932
functiongetInspectPort(inspectPort){
30-
if(!isUsingInspector()){
31-
returnnull;
32-
}
3333
if(typeofinspectPort==='function'){
3434
inspectPort=inspectPort();
3535
}elseif(inspectPort==null){

0 commit comments

Comments
 (0)