Fix stress runner signal related issues
The stress runner with -S option needs to stop all workers on error.
* The workers which terminated successfully (0) must be distinguished
orm the failed workers, and the successfully terminated workers
MUST not cause mass termination.
* The SIGCHLD single does not needs to be handled anymore when we terminate all
workers.
* Does not makes sens to handle again and again, the SIGCHLD signal after
any worker finished with failure.
Change-Id: Ic563f3acaa4e56f5135c438612f1db990b858552
diff --git a/tempest/stress/driver.py b/tempest/stress/driver.py
index 9660081..25ae27f 100644
--- a/tempest/stress/driver.py
+++ b/tempest/stress/driver.py
@@ -80,11 +80,16 @@
return ret
-def sigchld_handler(signal, frame):
+def sigchld_handler(signalnum, frame):
"""
Signal handler (only active if stop_on_error is True).
"""
- terminate_all_processes()
+ for process in processes:
+ if (not process['process'].is_alive() and
+ process['process'].exitcode != 0):
+ signal.signal(signalnum, signal.SIG_DFL)
+ terminate_all_processes()
+ break
def terminate_all_processes(check_interval=20):
@@ -202,6 +207,8 @@
had_errors = True
break
+ if stop_on_error:
+ signal.signal(signal.SIGCHLD, signal.SIG_DFL)
terminate_all_processes()
sum_fails = 0