Runner.queue.put('_TERMINATE_')
Runner.dump_process.join()
+ @staticmethod
+ def terminate_all():
+ '''Terminate all runners (subprocesses)'''
+ log.debug("Terminating all runners")
+ for runner in Runner.runners:
+ runner.process.terminate()
+ runner.process.join()
+ Runner.release(runner)
+
def __init__(self, config, queue):
self.context = {}
self.config = config
def join(self):
self.process.join()
+ return self.process.exitcode
def atexit_handler():
'''handler for process termination'''
+ base_runner.Runner.terminate_all()
+
if HeatStack.stacks_exist():
print "Deleting all stacks"
HeatStack.delete_all()
return runner
+def runner_join(runner):
+ '''join (wait for) a runner, exit process at runner failure'''
+ status = runner.join()
+ base_runner.Runner.release(runner)
+ if status != 0:
+ sys.exit("Runner failed")
+
+
def main():
'''yardstick main'''
# Wait for runners to finish
for runner in runners:
- runner.join()
+ runner_join(runner)
print "Runner ended, output in", prog_args.output_file
- base_runner.Runner.release(runner)
else:
# run serially
for scenario in scenarios:
runner = run_one_scenario(scenario, context, prog_args.output_file)
- runner.join()
+ runner_join(runner)
print "Runner ended, output in", prog_args.output_file
- base_runner.Runner.release(runner)
if prog_args.keep_deploy:
# keep deployment, forget about stack (hide it for exit handler)