@@ -334,37 +334,38 @@ def _try_shutdown(self, max_attempts, with_force=False):
334
334
attempts = 0
335
335
node_pid = self .pid
336
336
337
- # try stopping server N times
338
- while attempts < max_attempts :
339
- try :
340
- self .stop ()
341
- break # OK
342
- except ExecUtilException :
343
- pass # one more time
344
- except Exception :
345
- eprint ('cannot stop node {}' .format (self .name ))
346
- break
347
-
348
- attempts += 1
349
-
350
- # If force stopping is enabled and PID is valid
351
- if with_force and node_pid != 0 :
352
- # If we couldn't stop the node
353
- p_status_output = self .os_ops .exec_command (cmd = f'ps -p { node_pid } ' , shell = True ).decode ('utf-8' )
354
- if self .status () != NodeStatus .Stopped and p_status_output and str (node_pid ) in p_status_output :
337
+ if node_pid > 0 :
338
+ # try stopping server N times
339
+ while attempts < max_attempts :
355
340
try :
356
- eprint (f'Force stopping node { self .name } with PID { node_pid } ' )
357
- self .os_ops .kill (node_pid , signal .SIGKILL , expect_error = False )
341
+ self .stop ()
342
+ break # OK
343
+ except ExecUtilException :
344
+ pass # one more time
358
345
except Exception :
359
- # The node has already stopped
360
- pass
361
-
362
- # Check that node stopped - print only column pid without headers
363
- p_status_output = self .os_ops .exec_command (f'ps -o pid= -p { node_pid } ' , shell = True , ignore_errors = True ).decode ('utf-8' )
364
- if p_status_output and str (node_pid ) in p_status_output :
365
- eprint (f'Failed to stop node { self .name } .' )
366
- else :
367
- eprint (f'Node { self .name } has been stopped successfully.' )
346
+ eprint ('cannot stop node {}' .format (self .name ))
347
+ break
348
+
349
+ attempts += 1
350
+
351
+ # If force stopping is enabled and PID is valid
352
+ if with_force and node_pid != 0 :
353
+ # If we couldn't stop the node
354
+ p_status_output = self .os_ops .exec_command (cmd = f'ps -p { node_pid } ' , shell = True ).decode ('utf-8' )
355
+ if self .status () != NodeStatus .Stopped and p_status_output and str (node_pid ) in p_status_output :
356
+ try :
357
+ eprint (f'Force stopping node { self .name } with PID { node_pid } ' )
358
+ self .os_ops .kill (node_pid , signal .SIGKILL , expect_error = False )
359
+ except Exception :
360
+ # The node has already stopped
361
+ pass
362
+
363
+ # Check that node stopped - print only column pid without headers
364
+ p_status_output = self .os_ops .exec_command (f'ps -o pid= -p { node_pid } ' , shell = True , ignore_errors = True ).decode ('utf-8' )
365
+ if p_status_output and str (node_pid ) in p_status_output :
366
+ eprint (f'Failed to stop node { self .name } .' )
367
+ else :
368
+ eprint (f'Node { self .name } has been stopped successfully.' )
368
369
369
370
def _assign_master (self , master ):
370
371
"""NOTE: this is a private method!"""
0 commit comments