Fixes sumulator.py signal_handler logic

Change-Id: I95ee737a6c12572e7b3d27d8ea117c9f2909ef28
Closes-bug: #1576614
This commit is contained in:
Dmitriy Ukhlov 2016-04-29 07:18:39 -05:00
parent bedd400b6a
commit a98fa8f52f

View File

@ -532,12 +532,17 @@ def write_json_file(filename, output):
LOG.info('Stats are written into %s', filename) LOG.info('Stats are written into %s', filename)
class SignalExit(SystemExit):
def __init__(self, signo, exccode=1):
super(SignalExit, self).__init__(exccode)
self.signo = signo
def signal_handler(signum, frame): def signal_handler(signum, frame):
global IS_RUNNING global IS_RUNNING
IS_RUNNING = False IS_RUNNING = False
LOG.info('Signal %s is caught. Interrupting the execution', signum)
for server in SERVERS: raise SignalExit(signum)
server.stop()
def _setup_logging(is_debug): def _setup_logging(is_debug):
@ -647,47 +652,52 @@ def main():
signal.signal(signal.SIGTERM, signal_handler) signal.signal(signal.SIGTERM, signal_handler)
signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGINT, signal_handler)
if args.mode == 'rpc-server': try:
target = messaging.Target(topic=args.topic, server=args.server) if args.mode == 'rpc-server':
if args.url.startswith('zmq'): target = messaging.Target(topic=args.topic, server=args.server)
cfg.CONF.rpc_zmq_matchmaker = "redis" if args.url.startswith('zmq'):
cfg.CONF.rpc_zmq_matchmaker = "redis"
endpoint = rpc_server(transport, target, args.wait_before_answer, endpoint = rpc_server(transport, target, args.wait_before_answer,
args.executor, args.duration) args.executor, args.duration)
show_server_stats(endpoint, args.json_filename) show_server_stats(endpoint, args.json_filename)
elif args.mode == 'notify-server': elif args.mode == 'notify-server':
endpoint = notify_server(transport, args.topic, endpoint = notify_server(transport, args.topic,
args.wait_before_answer, args.duration, args.wait_before_answer, args.duration,
args.requeue) args.requeue)
show_server_stats(endpoint, args.json_filename) show_server_stats(endpoint, args.json_filename)
elif args.mode == 'batch-notify-server': elif args.mode == 'batch-notify-server':
endpoint = batch_notify_server(transport, args.topic, endpoint = batch_notify_server(transport, args.topic,
args.wait_before_answer, args.duration, args.wait_before_answer,
args.requeue) args.duration, args.requeue)
show_server_stats(endpoint, args.json_filename) show_server_stats(endpoint, args.json_filename)
elif args.mode == 'notify-client': elif args.mode == 'notify-client':
spawn_notify_clients(args.threads, args.topic, transport, spawn_notify_clients(args.threads, args.topic, transport,
args.messages, args.wait_after_msg, args.timeout, args.messages, args.wait_after_msg,
args.duration) args.timeout, args.duration)
show_client_stats(CLIENTS, args.json_filename) show_client_stats(CLIENTS, args.json_filename)
elif args.mode == 'rpc-client': elif args.mode == 'rpc-client':
targets = [target.partition('.')[::2] for target in args.targets] targets = [target.partition('.')[::2] for target in args.targets]
targets = [messaging.Target( targets = [messaging.Target(
topic=topic, server=server_name, fanout=args.is_fanout) for topic=topic, server=server_name, fanout=args.is_fanout) for
topic, server_name in targets] topic, server_name in targets]
spawn_rpc_clients(args.threads, transport, targets, spawn_rpc_clients(args.threads, transport, targets,
args.wait_after_msg, args.timeout, args.is_cast, args.wait_after_msg, args.timeout, args.is_cast,
args.messages, args.duration) args.messages, args.duration)
show_client_stats(CLIENTS, args.json_filename, not args.is_cast) show_client_stats(CLIENTS, args.json_filename, not args.is_cast)
if args.exit_wait: if args.exit_wait:
LOG.info("Finished. waiting for %d seconds", args.exit_wait) LOG.info("Finished. waiting for %d seconds", args.exit_wait)
time.sleep(args.exit_wait) time.sleep(args.exit_wait)
except SignalExit as e:
LOG.info('Signal %s is caught. Interrupting the execution', e.signo)
for server in SERVERS:
server.stop()
if __name__ == '__main__': if __name__ == '__main__':