summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-03-03 10:57:41 +0000
committerGerrit Code Review <review@openstack.org>2015-03-03 10:57:41 +0000
commit23010169d7bd466f8da362abb0292bbc17ca742d (patch)
tree3f89a87c1d61dcb7806a80f7eb58622af7767e27
parent47f831fb1c1f86c18ff98c2ed0c5f75f97d557d1 (diff)
parent60bf3af5879e5f5df1a6be69f98e714ed9c17212 (diff)
downloadtooz-23010169d7bd466f8da362abb0292bbc17ca742d.tar.gz
Merge "Allow coordinator non-string options and use them"
-rw-r--r--tooz/coordination.py16
-rw-r--r--tooz/drivers/zake.py6
2 files changed, 19 insertions, 3 deletions
diff --git a/tooz/coordination.py b/tooz/coordination.py
index cbeec4c..fa5dbf5 100644
--- a/tooz/coordination.py
+++ b/tooz/coordination.py
@@ -340,21 +340,33 @@ class CoordAsyncResult(object):
"""Returns True if the task is done, False otherwise."""
-def get_coordinator(backend_url, member_id):
+def get_coordinator(backend_url, member_id, **kwargs):
"""Initialize and load the backend.
:param backend_url: the backend URL to use
:type backend: str
:param member_id: the id of the member
:type member_id: str
+ :param kwargs: additional coordinator options (these take precedence over
+ options of the **same** name found in the ``backend_url``
+ arguments query string)
"""
parsed_url = netutils.urlsplit(backend_url)
parsed_qs = six.moves.urllib.parse.parse_qs(parsed_url.query)
+ if kwargs:
+ options = {}
+ for (k, v) in six.iteritems(kwargs):
+ options[k] = [v]
+ for (k, v) in six.iteritems(parsed_qs):
+ if k not in options:
+ options[k] = v
+ else:
+ options = parsed_qs
return driver.DriverManager(
namespace=TOOZ_BACKENDS_NAMESPACE,
name=parsed_url.scheme,
invoke_on_load=True,
- invoke_args=(member_id, parsed_url, parsed_qs)).driver
+ invoke_args=(member_id, parsed_url, options)).driver
class ToozError(Exception):
diff --git a/tooz/drivers/zake.py b/tooz/drivers/zake.py
index 1909a43..e10f365 100644
--- a/tooz/drivers/zake.py
+++ b/tooz/drivers/zake.py
@@ -35,4 +35,8 @@ class ZakeDriver(zookeeper.KazooDriver):
@classmethod
def _make_client(cls, parsed_url, options):
- return fake_client.FakeClient(storage=cls.fake_storage)
+ if 'storage' in options:
+ storage = options['storage'][-1]
+ else:
+ storage = cls.fake_storage
+ return fake_client.FakeClient(storage=storage)