class ThreadingServerManager:
def __init__(self, server, *args, **kwargs):
- self.server = server(*args, **kwargs)
+ self.server = None
+ n = 0
+ while True:
+ try:
+ self.server = server(*args, **kwargs)
+ except isc.cc.session.SessionTimeout:
+ if self.server is not None:
+ self.server.shutdown()
+ # retrying until 3 times
+ if n >2: raise
+ n = n + 1
+ continue
+ else: break
self.server_name = server.__name__
self.server._thread = threading.Thread(
name=self.server_name, target=self.server.run)
self.server.shutdown()
self.server._thread.join(0) # timeout is 0
+def do_nothing(*args, **kwargs): pass
+
+class dummy_sys:
+ """Dummy for sys"""
+ class dummy_io:
+ write = do_nothing
+ stdout = stderr = dummy_io()
+
class MockMsgq:
def __init__(self):
self._started = threading.Event()
- self.msgq = msgq.MsgQ(verbose=True)
+ # suppress output to stdout and stderr
+ msgq.sys = dummy_sys()
+ msgq.print = do_nothing
+ self.msgq = msgq.MsgQ(verbose=False)
result = self.msgq.setup()
if result:
sys.exit("Error on Msgq startup: %s" % result)
def run(self):
self._started.set()
- self.cfgmgr.run()
+ try:
+ self.cfgmgr.run()
+ except Exception:
+ pass
def shutdown(self):
self.cfgmgr.running = False
self.mccs.start()
self.running = True
self._started.set()
- while self.running:
- self.mccs.check_command(False)
+ try:
+ while self.running:
+ self.mccs.check_command(False)
+ except Exception:
+ pass
def shutdown(self):
self.running = False
self.mccs.start()
self.running = True
self._started.set()
- while self.running:
- self.mccs.check_command(False)
+ try:
+ while self.running:
+ self.mccs.check_command(False)
+ except Exception:
+ pass
def shutdown(self):
self.running = False
def run(self):
self._started.set()
- self.start()
+ try:
+ self.start()
+ except Exception:
+ pass
def shutdown(self):
self.command_shutdown()
def run(self):
self._started.set()
- self.start()
+ try:
+ self.start()
+ except Exception:
+ pass
def shutdown(self):
self.stop()