From 16837b38c2bb5c397aa971eecf7801f6b0bfa2ea Mon Sep 17 00:00:00 2001 From: Anders Ingemann Date: Mon, 24 Nov 2014 17:26:13 +0100 Subject: [PATCH] Close thread on both ends! --- bootstrapvz/base/remote/__init__.py | 38 ---------------------- bootstrapvz/base/remote/callback.py | 2 -- bootstrapvz/base/remote/log.py | 1 + bootstrapvz/base/remote/server.py | 11 +++++-- bootstrapvz/base/remote/ssh_rpc_manager.py | 5 ++- 5 files changed, 12 insertions(+), 45 deletions(-) diff --git a/bootstrapvz/base/remote/__init__.py b/bootstrapvz/base/remote/__init__.py index 27a7e05..c65b550 100644 --- a/bootstrapvz/base/remote/__init__.py +++ b/bootstrapvz/base/remote/__init__.py @@ -34,12 +34,10 @@ def main(): server = manager.rpc_server # Everything has been set up, begin the bootstrapping process - print('run') server.run(None, debug=opts['--debug'], pause_on_error=False, dry_run=opts['--dry-run']) - print('hasrun') finally: manager.stop() @@ -62,39 +60,3 @@ Options: -h, --help show this help """ return docopt(usage) - - -def setup_interrupt_server(manager): - - def on_error(e): - raw_input('Press Enter to commence rollback') - return True - - daemon = Pyro4.Daemon() - daemon.register(on_error) - - def serve(): - daemon.requestLoop(loopCondition=lambda: manager.current == 'rpc_started') - - thread = Thread(target=serve) - thread.start() - return (thread, on_error) - - -def setup_log_server(manager): - from log import LogServer - log_server = LogServer() - daemon = Pyro4.Daemon() - daemon.register(log_server) - - def serve(): - def check(): - import logging - log = logging.getLogger(__name__) - log.info(stop) - return not stop - daemon.requestLoop(loopCondition=check) - - thread = Thread(target=serve) - thread.start() - return (thread, log_server) diff --git a/bootstrapvz/base/remote/callback.py b/bootstrapvz/base/remote/callback.py index 80fe22c..9b77684 100644 --- a/bootstrapvz/base/remote/callback.py +++ b/bootstrapvz/base/remote/callback.py @@ -26,6 +26,4 @@ class CallbackServer(object): def stop(self): self.stop_serving = True if hasattr(self, 'thread'): - print('joining') self.thread.join() - print('joined') diff --git a/bootstrapvz/base/remote/log.py b/bootstrapvz/base/remote/log.py index 169ce52..76ee608 100644 --- a/bootstrapvz/base/remote/log.py +++ b/bootstrapvz/base/remote/log.py @@ -1,6 +1,7 @@ import logging import pickle + class LogForwarder(logging.Handler): def __init__(self, level=logging.NOTSET): diff --git a/bootstrapvz/base/remote/server.py b/bootstrapvz/base/remote/server.py index 837349b..76f2832 100644 --- a/bootstrapvz/base/remote/server.py +++ b/bootstrapvz/base/remote/server.py @@ -19,6 +19,9 @@ def setup_logging(): def serve(opts, log_forwarder): class Server(object): + def __init__(self): + self.stop_serving = False + def run(self, *args, **kwargs): from bootstrapvz.base.main import run return run(*args, **kwargs) @@ -29,12 +32,16 @@ def serve(opts, log_forwarder): def ping(self): return 'pong' - server = Server() + def stop(self): + self.stop_serving = True import Pyro4 + Pyro4.config.COMMTIMEOUT = 0.5 daemon = Pyro4.Daemon('localhost', port=int(opts['--listen']), unixsocket=None) + + server = Server() daemon.register(server, 'server') - daemon.requestLoop() + daemon.requestLoop(loopCondition=lambda: not server.stop_serving) def getopts(): diff --git a/bootstrapvz/base/remote/ssh_rpc_manager.py b/bootstrapvz/base/remote/ssh_rpc_manager.py index ef14317..2110f00 100644 --- a/bootstrapvz/base/remote/ssh_rpc_manager.py +++ b/bootstrapvz/base/remote/ssh_rpc_manager.py @@ -52,7 +52,6 @@ class SSHRPCManager(object): else: raise e except (Exception, KeyboardInterrupt) as e: - print('terminateE') self.process.terminate() raise e @@ -61,7 +60,7 @@ class SSHRPCManager(object): self.callback_server.start(self.rpc_server) def stop(self): - print('terminate') - self.process.terminate() if hasattr(self, 'callback_server'): self.callback_server.stop() + self.rpc_server.stop() + self.process.terminate()