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
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class IncompatibleVersion(TaskFlowException):
|
||||||
|
"""Raised when some type of version incompatibility occurs."""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ConnectionFailure(TaskFlowException):
|
class ConnectionFailure(TaskFlowException):
|
||||||
"""Raised when some type of connection can not be opened or is lost."""
|
"""Raised when some type of connection can not be opened or is lost."""
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -76,16 +76,9 @@ class ZkBackend(base.Backend):
|
|||||||
if not self._owned:
|
if not self._owned:
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
self._client.stop()
|
k_utils.finalize_client(self._client)
|
||||||
except (k_exc.KazooException, k_exc.ZookeeperError) as e:
|
except (k_exc.KazooException, k_exc.ZookeeperError) as e:
|
||||||
raise exc.StorageError("Unable to stop client: %s" % e)
|
raise exc.StorageError("Unable to finalize client", 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)
|
|
||||||
|
|
||||||
|
|
||||||
class ZkConnection(base.Connection):
|
class ZkConnection(base.Connection):
|
||||||
@@ -101,13 +94,7 @@ class ZkConnection(base.Connection):
|
|||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
with self._exc_wrapper():
|
with self._exc_wrapper():
|
||||||
zk_ver = self._client.server_version()
|
k_utils.check_compatible(self._client, MIN_ZK_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))
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def backend(self):
|
def backend(self):
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
from kazoo import client
|
from kazoo import client
|
||||||
import six
|
import six
|
||||||
|
|
||||||
|
from taskflow import exceptions as exc
|
||||||
|
|
||||||
|
|
||||||
def _parse_hosts(hosts):
|
def _parse_hosts(hosts):
|
||||||
if isinstance(hosts, six.string_types):
|
if isinstance(hosts, six.string_types):
|
||||||
@@ -31,6 +33,46 @@ def _parse_hosts(hosts):
|
|||||||
return 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):
|
def make_client(conf):
|
||||||
"""Creates a kazoo client given a configuration dictionary."""
|
"""Creates a kazoo client given a configuration dictionary."""
|
||||||
client_kwargs = {
|
client_kwargs = {
|
||||||
|
|||||||
Reference in New Issue
Block a user