diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-03-03 10:57:41 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-03-03 10:57:41 +0000 |
commit | 23010169d7bd466f8da362abb0292bbc17ca742d (patch) | |
tree | 3f89a87c1d61dcb7806a80f7eb58622af7767e27 | |
parent | 47f831fb1c1f86c18ff98c2ed0c5f75f97d557d1 (diff) | |
parent | 60bf3af5879e5f5df1a6be69f98e714ed9c17212 (diff) | |
download | tooz-23010169d7bd466f8da362abb0292bbc17ca742d.tar.gz |
Merge "Allow coordinator non-string options and use them"
-rw-r--r-- | tooz/coordination.py | 16 | ||||
-rw-r--r-- | tooz/drivers/zake.py | 6 |
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) |