Close thread on both ends!

This commit is contained in:
Anders Ingemann 2014-11-24 17:26:13 +01:00
parent e271f3e49a
commit 16837b38c2
5 changed files with 12 additions and 45 deletions

View file

@ -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)

View file

@ -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')

View file

@ -1,6 +1,7 @@
import logging
import pickle
class LogForwarder(logging.Handler):
def __init__(self, level=logging.NOTSET):

View file

@ -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():

View file

@ -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()