Add ZK session timeout option
Change-Id: If804c18f2103baa12c9c3bd0344a166fac1ea749
diff --git a/doc/source/admin/components.rst b/doc/source/admin/components.rst
index fbb8cbc..b3a4c3f 100644
--- a/doc/source/admin/components.rst
+++ b/doc/source/admin/components.rst
@@ -115,6 +115,11 @@
A list of zookeeper hosts for Zuul to use when communicating
with Nodepool.
+ .. attr:: session_timeout
+ :default: 10.0
+
+ The ZooKeeper session timeout, in seconds.
+
.. _scheduler:
diff --git a/zuul/cmd/scheduler.py b/zuul/cmd/scheduler.py
index a9923c6..bba1922 100755
--- a/zuul/cmd/scheduler.py
+++ b/zuul/cmd/scheduler.py
@@ -154,8 +154,10 @@
zookeeper = zuul.zk.ZooKeeper()
zookeeper_hosts = get_default(self.config, 'zookeeper',
'hosts', '127.0.0.1:2181')
+ zookeeper_timeout = float(get_default(self.config, 'zookeeper',
+ 'session_timeout', 10.0))
- zookeeper.connect(zookeeper_hosts)
+ zookeeper.connect(zookeeper_hosts, timeout=zookeeper_timeout)
cache_expiry = get_default(self.config, 'webapp', 'status_expiry', 1)
listen_address = get_default(self.config, 'webapp', 'listen_address',
diff --git a/zuul/zk.py b/zuul/zk.py
index 5ea4e56..dcaa172 100644
--- a/zuul/zk.py
+++ b/zuul/zk.py
@@ -90,7 +90,7 @@
def resetLostFlag(self):
self._became_lost = False
- def connect(self, hosts, read_only=False):
+ def connect(self, hosts, read_only=False, timeout=10.0):
'''
Establish a connection with ZooKeeper cluster.
@@ -100,10 +100,12 @@
:param str hosts: Comma-separated list of hosts to connect to (e.g.
127.0.0.1:2181,127.0.0.1:2182,[::1]:2183).
:param bool read_only: If True, establishes a read-only connection.
-
+ :param float timeout: The ZooKeeper session timeout, in
+ seconds (default: 10.0).
'''
if self.client is None:
- self.client = KazooClient(hosts=hosts, read_only=read_only)
+ self.client = KazooClient(hosts=hosts, read_only=read_only,
+ timeout=timeout)
self.client.add_listener(self._connection_listener)
self.client.start()