10000 improve handling when procdump detects the process is dead (#9381) · arangodb/arangodb@5bab188 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5bab188

Browse files
dothebartjsteemann
authored andcommitted
improve handling when procdump detects the process is dead (#9381)
1 parent b70d737 commit 5bab188

File tree

2 files changed

+23
-17
lines changed

2 files changed

+23
-17
lines changed

js/client/modules/@arangodb/crash-utils.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -185,30 +185,30 @@ Crash analysis of: ` + JSON.stringify(instanceInfo) + '\n';
185185
return 'cdb ' + args.join(' ');
186186
}
187187

188-
function checkMonitorAlive (binary, arangod, options, res) {
189-
if (arangod.hasOwnProperty('monitor') ) {
188+
function checkMonitorAlive (binary, instanceInfo, options, res) {
189+
if (instanceInfo.hasOwnProperty('monitor') ) {
190190
// Windows: wait for procdump to do its job...
191-
if (!arangod.monitor.hasOwnProperty('status')) {
192-
let rc = statusExternal(arangod.monitor.pid, false);
191+
if (!instanceInfo.monitor.hasOwnProperty('status')) {
192+
let rc = statusExternal(instanceInfo.monitor.pid, false);
193193
if (rc.status !== 'RUNNING') {
194-
arangod.monitor = rc;
194+
instanceInfo.monitor = rc;
195195
// procdump doesn't set propper exit codes, check for
196196
// dumps that may exist:
197-
if (fs.exists(arangod.coreFilePattern)) {
197+
if (fs.exists(instanceInfo.coreFilePattern)) {
198198
print("checkMonitorAlive: marking crashy");
199-
arangod.monitor.monitorExited = true;
200-
arangod.monitor.pid = null;
199+
instanceInfo.monitor.monitorExited = true;
200+
instanceInfo.monitor.pid = null;
201201
pu.serverCrashed = true;
202202
options.cleanup = false;
203-
arangod['exitStatus'] = {};
204-
analyzeCrash(binary, arangod, options, "the process monitor commanded error");
205-
Object.assign(arangod.exitStatus,
206-
killExternal(arangod.pid, abortSignal));
203+
instanceInfo['exitStatus'] = {};
204+
analyzeCrash(binary, instanceInfo, options, "the process monitor commanded error");
205+
Object.assign(instanceInfo.exitStatus,
206+
killExternal(instanceInfo.pid, abortSignal));
207207
return false;
208208
}
209209
}
210210
}
211-
else return arangod.monitor.exitStatus;
211+
else return instanceInfo.monitor.exitStatus;
212212
}
213213
return true;
214214
}

js/client/modules/@arangodb/process-utils.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1238,7 +1238,13 @@ function shutdownInstance (instanceInfo, options, forceTerminate) {
12381238
}
12391239
if (arangod.exitStatus.status === 'RUNNING') {
12401240
arangod.exitStatus = statusExternal(arangod.pid, false);
1241-
crashUtils.checkMonitorAlive(ARANGOD_BIN, arangod, options, arangod.exitStatus);
1241+
if (!crashUtils.checkMonitorAlive(ARANGOD_BIN, arangod, options, arangod.exitStatus)) {
1242+
if (arangod.role !== 'agent') {
1243+
nonAgenciesCount--;
1244+
}
1245+
print(Date() + ' Server "' + arangod.role + '" shutdown: detected irregular death by monitor: pid', arangod.pid);
1246+
return false;
1247+
}
12421248
}
12431249
if (arangod.exitStatus.status === 'RUNNING') {
12441250
let localTimeout = timeout;
@@ -1259,15 +1265,15 @@ function shutdownInstance (instanceInfo, options, forceTerminate) {
12591265
'" forcefully KILLED after 60s - ' +
12601266
arangod.exitStatus.signal);
12611267
if (arangod.role !== 'agent') {
1262-
nonAgenciesCount --;
1268+
nonAgenciesCount--;
12631269
}
12641270
return false;
12651271
} else {
12661272
return true;
12671273
}
12681274
} else if (arangod.exitStatus.status !== 'TERMINATED') {
12691275
if (arangod.role !== 'agent') {
1270-
nonAgenciesCount --;
1276+
nonAgenciesCount--;
12711277
}
12721278
if (arangod.exitStatus.hasOwnProperty('signal') || arangod.exitStatus.hasOwnProperty('monitor')) {
12731279
analyzeServerCrash(arangod, options, 'instance "' + arangod.role + '" Shutdown - ' + arangod.exitStatus.signal);
@@ -1278,7 +1284,7 @@ function shutdownInstance (instanceInfo, options, forceTerminate) {
12781284
stopProcdump(options, arangod);
12791285
} else {
12801286
if (arangod.role !== 'agent') {
1281-
nonAgenciesCount --;
1287+
nonAgenciesCount--;
12821288
}
12831289
print(Date() + ' Server "' + arangod.role + '" shutdown: Success: pid', arangod.pid);
12841290
stopProcdump(options, arangod);

0 commit comments

Comments
 (0)
0