Add zookeeper-timeout connection config
The default zookeeper session timout is 10 seconds which is not enough on a highly loaded nodepool. Like in zuul make this configurable so we can avoid session losses. Change-Id: Id7087141174c84c6cdcbb3933c233f5fa0e7d569
This commit is contained in:
parent
26bad7f853
commit
ec55126f6b
@ -160,6 +160,11 @@ Options
|
|||||||
|
|
||||||
The path to the PEM encoded CA certificate.
|
The path to the PEM encoded CA certificate.
|
||||||
|
|
||||||
|
.. attr:: zookeeper-timeout
|
||||||
|
:type: float
|
||||||
|
:default: 10.0
|
||||||
|
|
||||||
|
The ZooKeeper session timeout, in seconds.
|
||||||
|
|
||||||
.. attr:: labels
|
.. attr:: labels
|
||||||
:type: list
|
:type: list
|
||||||
|
@ -1407,7 +1407,9 @@ class NodePoolBuilder(object):
|
|||||||
list(self._config.zookeeper_servers.values()),
|
list(self._config.zookeeper_servers.values()),
|
||||||
tls_cert=self._config.zookeeper_tls_cert,
|
tls_cert=self._config.zookeeper_tls_cert,
|
||||||
tls_key=self._config.zookeeper_tls_key,
|
tls_key=self._config.zookeeper_tls_key,
|
||||||
tls_ca=self._config.zookeeper_tls_ca)
|
tls_ca=self._config.zookeeper_tls_ca,
|
||||||
|
timeout=self._config.zookeeper_timeout,
|
||||||
|
)
|
||||||
|
|
||||||
self.log.debug('Starting listener for build jobs')
|
self.log.debug('Starting listener for build jobs')
|
||||||
|
|
||||||
|
@ -74,6 +74,7 @@ class ConfigValidator:
|
|||||||
'chroot': str,
|
'chroot': str,
|
||||||
}],
|
}],
|
||||||
'zookeeper-tls': zk_tls,
|
'zookeeper-tls': zk_tls,
|
||||||
|
'zookeeper-timeout': float,
|
||||||
'providers': list,
|
'providers': list,
|
||||||
'labels': [label],
|
'labels': [label],
|
||||||
'diskimages': [diskimage],
|
'diskimages': [diskimage],
|
||||||
|
@ -38,6 +38,7 @@ class Config(ConfigValue):
|
|||||||
self.providers = {}
|
self.providers = {}
|
||||||
self.provider_managers = {}
|
self.provider_managers = {}
|
||||||
self.zookeeper_servers = {}
|
self.zookeeper_servers = {}
|
||||||
|
self.zookeeper_timeout = 10.0
|
||||||
self.zookeeper_tls_cert = None
|
self.zookeeper_tls_cert = None
|
||||||
self.zookeeper_tls_key = None
|
self.zookeeper_tls_key = None
|
||||||
self.zookeeper_tls_ca = None
|
self.zookeeper_tls_ca = None
|
||||||
@ -55,6 +56,7 @@ class Config(ConfigValue):
|
|||||||
self.providers == other.providers and
|
self.providers == other.providers and
|
||||||
self.provider_managers == other.provider_managers and
|
self.provider_managers == other.provider_managers and
|
||||||
self.zookeeper_servers == other.zookeeper_servers and
|
self.zookeeper_servers == other.zookeeper_servers and
|
||||||
|
self.zookeeper_timeout == other.zookeeper_timeout and
|
||||||
self.elements_dir == other.elements_dir and
|
self.elements_dir == other.elements_dir and
|
||||||
self.images_dir == other.images_dir and
|
self.images_dir == other.images_dir and
|
||||||
self.build_log_dir == other.build_log_dir and
|
self.build_log_dir == other.build_log_dir and
|
||||||
@ -106,6 +108,9 @@ class Config(ConfigValue):
|
|||||||
name = z.host + '_' + str(z.port)
|
name = z.host + '_' + str(z.port)
|
||||||
self.zookeeper_servers[name] = z
|
self.zookeeper_servers[name] = z
|
||||||
|
|
||||||
|
def setZooKeeperTimeout(self, timeout):
|
||||||
|
self.zookeeper_timeout = float(timeout)
|
||||||
|
|
||||||
def setDiskImages(self, diskimages_cfg):
|
def setDiskImages(self, diskimages_cfg):
|
||||||
if not diskimages_cfg:
|
if not diskimages_cfg:
|
||||||
return
|
return
|
||||||
@ -346,6 +351,7 @@ def loadConfig(config_path, env=os.environ):
|
|||||||
newconfig.setMaxHoldAge(config.get('max-hold-age'))
|
newconfig.setMaxHoldAge(config.get('max-hold-age'))
|
||||||
newconfig.setWebApp(config.get('webapp'))
|
newconfig.setWebApp(config.get('webapp'))
|
||||||
newconfig.setZooKeeperServers(config.get('zookeeper-servers'))
|
newconfig.setZooKeeperServers(config.get('zookeeper-servers'))
|
||||||
|
newconfig.setZooKeeperTimeout(config.get('zookeeper-timeout', 10.0))
|
||||||
newconfig.setDiskImages(config.get('diskimages'))
|
newconfig.setDiskImages(config.get('diskimages'))
|
||||||
newconfig.setLabels(config.get('labels'))
|
newconfig.setLabels(config.get('labels'))
|
||||||
newconfig.setProviders(config.get('providers'))
|
newconfig.setProviders(config.get('providers'))
|
||||||
|
@ -947,7 +947,9 @@ class NodePool(threading.Thread):
|
|||||||
self.zk.connect(configured,
|
self.zk.connect(configured,
|
||||||
tls_cert=config.zookeeper_tls_cert,
|
tls_cert=config.zookeeper_tls_cert,
|
||||||
tls_key=config.zookeeper_tls_key,
|
tls_key=config.zookeeper_tls_key,
|
||||||
tls_ca=config.zookeeper_tls_ca)
|
tls_ca=config.zookeeper_tls_ca,
|
||||||
|
timeout=config.zookeeper_timeout,
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
self.log.debug("Detected ZooKeeper server changes")
|
self.log.debug("Detected ZooKeeper server changes")
|
||||||
self.zk.resetHosts(configured)
|
self.zk.resetHosts(configured)
|
||||||
|
2
nodepool/tests/fixtures/node.yaml
vendored
2
nodepool/tests/fixtures/node.yaml
vendored
@ -13,6 +13,8 @@ zookeeper-tls:
|
|||||||
cert: {zookeeper_cert}
|
cert: {zookeeper_cert}
|
||||||
key: {zookeeper_key}
|
key: {zookeeper_key}
|
||||||
|
|
||||||
|
zookeeper-timeout: 20.0
|
||||||
|
|
||||||
labels:
|
labels:
|
||||||
- name: fake-label
|
- name: fake-label
|
||||||
min-ready: 1
|
min-ready: 1
|
||||||
|
@ -974,7 +974,7 @@ class ZooKeeper(object):
|
|||||||
self._became_lost = False
|
self._became_lost = False
|
||||||
|
|
||||||
def connect(self, host_list, read_only=False, tls_cert=None,
|
def connect(self, host_list, read_only=False, tls_cert=None,
|
||||||
tls_key=None, tls_ca=None):
|
tls_key=None, tls_ca=None, timeout=10.0):
|
||||||
'''
|
'''
|
||||||
Establish a connection with ZooKeeper cluster.
|
Establish a connection with ZooKeeper cluster.
|
||||||
|
|
||||||
@ -992,8 +992,11 @@ class ZooKeeper(object):
|
|||||||
'''
|
'''
|
||||||
if self.client is None:
|
if self.client is None:
|
||||||
hosts = buildZooKeeperHosts(host_list)
|
hosts = buildZooKeeperHosts(host_list)
|
||||||
args = dict(hosts=hosts,
|
args = dict(
|
||||||
read_only=read_only)
|
hosts=hosts,
|
||||||
|
read_only=read_only,
|
||||||
|
timeout=timeout,
|
||||||
|
)
|
||||||
|
|
||||||
args['use_ssl'] = True
|
args['use_ssl'] = True
|
||||||
if not (tls_key and tls_cert and tls_ca):
|
if not (tls_key and tls_cert and tls_ca):
|
||||||
|
5
releasenotes/notes/zk-timeout-bede88920e248c96.yaml
Normal file
5
releasenotes/notes/zk-timeout-bede88920e248c96.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
It is now possible to configure the :attr:`zookeeper-timeout`. which can
|
||||||
|
help to avoid zookeeper session losses on busy systems.
|
Loading…
x
Reference in New Issue
Block a user