Merge pull request #61 from xujyan/jyx/kazoo_cleanup
Stop Kazoo when task runner stops.
diff --git a/mysos/executor/mysos_task_runner.py b/mysos/executor/mysos_task_runner.py
index 745b840..0051bcb 100644
--- a/mysos/executor/mysos_task_runner.py
+++ b/mysos/executor/mysos_task_runner.py
@@ -39,6 +39,7 @@
installer = self._installer_provider.from_task(task, sandbox)
backup_store = self._backup_store_provider.from_task(task, sandbox)
except (TaskControl.Error, PackageInstaller.Error) as e:
+ kazoo.stop() # Kazoo needs to be cleaned up. See kazoo/issues/217.
raise TaskError(e.message)
state_manager = StateManager(sandbox, backup_store)
@@ -96,6 +97,7 @@
self.demoted = threading.Event()
self.master = Queue.Queue() # Set when a master change is detected.
+ self._kazoo = kazoo
self._listener = ClusterListener(
kazoo,
cluster_root,
@@ -146,6 +148,13 @@
self._exited.set()
def stop(self, timeout=10):
+ try:
+ return self._stop(timeout)
+ finally:
+ self._kazoo.stop()
+ log.info("Runner cleaned up")
+
+ def _stop(self, timeout):
"""
Stop the runner and wait for its thread (and the sub-processes) to exit.