Merge "Move some common/to be shared kazoo utils to kazoo_utils"
This commit is contained in:
@@ -22,6 +22,11 @@ class TaskFlowException(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class IncompatibleVersion(TaskFlowException):
|
||||
"""Raised when some type of version incompatibility occurs."""
|
||||
pass
|
||||
|
||||
|
||||
class ConnectionFailure(TaskFlowException):
|
||||
"""Raised when some type of connection can not be opened or is lost."""
|
||||
pass
|
||||
|
||||
@@ -76,16 +76,9 @@ class ZkBackend(base.Backend):
|
||||
if not self._owned:
|
||||
return
|
||||
try:
|
||||
self._client.stop()
|
||||
k_utils.finalize_client(self._client)
|
||||
except (k_exc.KazooException, k_exc.ZookeeperError) as e:
|
||||
raise exc.StorageError("Unable to stop client: %s" % e)
|
||||
try:
|
||||
self._client.close()
|
||||
except TypeError:
|
||||
# NOTE(harlowja): https://github.com/python-zk/kazoo/issues/167
|
||||
pass
|
||||
except (k_exc.KazooException, k_exc.ZookeeperError) as e:
|
||||
raise exc.StorageError("Unable to close client: %s" % e)
|
||||
raise exc.StorageError("Unable to finalize client", e)
|
||||
|
||||
|
||||
class ZkConnection(base.Connection):
|
||||
@@ -101,13 +94,7 @@ class ZkConnection(base.Connection):
|
||||
|
||||
def validate(self):
|
||||
with self._exc_wrapper():
|
||||
zk_ver = self._client.server_version()
|
||||
if tuple(zk_ver) < MIN_ZK_VERSION:
|
||||
given_zk_ver = ".".join([str(a) for a in zk_ver])
|
||||
desired_zk_ver = ".".join([str(a) for a in MIN_ZK_VERSION])
|
||||
raise exc.StorageError("Incompatible zookeeper version"
|
||||
" %s detected, zookeeper >= %s required"
|
||||
% (given_zk_ver, desired_zk_ver))
|
||||
k_utils.check_compatible(self._client, MIN_ZK_VERSION)
|
||||
|
||||
@property
|
||||
def backend(self):
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
from kazoo import client
|
||||
import six
|
||||
|
||||
from taskflow import exceptions as exc
|
||||
|
||||
|
||||
def _parse_hosts(hosts):
|
||||
if isinstance(hosts, six.string_types):
|
||||
@@ -31,6 +33,46 @@ def _parse_hosts(hosts):
|
||||
return hosts
|
||||
|
||||
|
||||
def finalize_client(client):
|
||||
"""Stops and closes a client, even if it wasn't started."""
|
||||
client.stop()
|
||||
try:
|
||||
client.close()
|
||||
except TypeError:
|
||||
# NOTE(harlowja): https://github.com/python-zk/kazoo/issues/167
|
||||
#
|
||||
# This can be removed after that one is fixed/merged.
|
||||
pass
|
||||
|
||||
|
||||
def check_compatible(client, min_version=None, max_version=None):
|
||||
"""Checks if a kazook client is backed by a zookeeper server version
|
||||
that satisfies a given min (inclusive) and max (inclusive) version range.
|
||||
"""
|
||||
server_version = None
|
||||
if min_version:
|
||||
server_version = tuple((int(a) for a in client.server_version()))
|
||||
min_version = tuple((int(a) for a in min_version))
|
||||
if server_version < min_version:
|
||||
pretty_server_version = ".".join([str(a) for a in server_version])
|
||||
min_version = ".".join([str(a) for a in min_version])
|
||||
raise exc.IncompatibleVersion("Incompatible zookeeper version"
|
||||
" %s detected, zookeeper >= %s"
|
||||
" required" % (pretty_server_version,
|
||||
min_version))
|
||||
if max_version:
|
||||
if server_version is None:
|
||||
server_version = tuple((int(a) for a in client.server_version()))
|
||||
max_version = tuple((int(a) for a in max_version))
|
||||
if server_version > max_version:
|
||||
pretty_server_version = ".".join([str(a) for a in server_version])
|
||||
max_version = ".".join([str(a) for a in max_version])
|
||||
raise exc.IncompatibleVersion("Incompatible zookeeper version"
|
||||
" %s detected, zookeeper <= %s"
|
||||
" required" % (pretty_server_version,
|
||||
max_version))
|
||||
|
||||
|
||||
def make_client(conf):
|
||||
"""Creates a kazoo client given a configuration dictionary."""
|
||||
client_kwargs = {
|
||||
|
||||
Reference in New Issue
Block a user