diff options
| author | Jenkins <jenkins@review.openstack.org> | 2017-07-05 12:50:16 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2017-07-05 12:50:16 +0000 |
| commit | 03dbf70f701c322d422ea65dacdc05d08e83d303 (patch) | |
| tree | 39825e1516e813d249e86dbfeb6204ddb8b4a3a8 /tooz/drivers/etcd3gw.py | |
| parent | d88f0f4c84f2c120dcbde2df8c7066d334a1eda6 (diff) | |
| parent | 7987f4455a7ff4e75d64c46a42d50017f53bfc9e (diff) | |
| download | tooz-03dbf70f701c322d422ea65dacdc05d08e83d303.tar.gz | |
Merge "Make sure Lock.heartbeat() returns True/False"
Diffstat (limited to 'tooz/drivers/etcd3gw.py')
| -rw-r--r-- | tooz/drivers/etcd3gw.py | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/tooz/drivers/etcd3gw.py b/tooz/drivers/etcd3gw.py index 1370f1c..c3367ca 100644 --- a/tooz/drivers/etcd3gw.py +++ b/tooz/drivers/etcd3gw.py @@ -14,6 +14,7 @@ from __future__ import absolute_import import base64 +import threading import uuid import etcd3gw @@ -68,6 +69,7 @@ class Etcd3Lock(locking.Lock): self._key_b64 = base64.b64encode(self._key).decode("ascii") self._uuid = base64.b64encode(uuid.uuid4().bytes).decode("ascii") self._lease = self._coord.client.lease(self._timeout) + self._exclusive_access = threading.Lock() @_translate_failures def acquire(self, blocking=True, shared=False): @@ -126,11 +128,12 @@ class Etcd3Lock(locking.Lock): }] } - result = self._coord.client.transaction(txn) - success = result.get('succeeded', False) - if success: - self._coord._acquired_locks.remove(self) - return True + with self._exclusive_access: + result = self._coord.client.transaction(txn) + success = result.get('succeeded', False) + if success: + self._coord._acquired_locks.remove(self) + return True return False @_translate_failures @@ -140,9 +143,17 @@ class Etcd3Lock(locking.Lock): return True return False + @property + def acquired(self): + return self in self._coord._acquired_locks + @_translate_failures def heartbeat(self): - self._lease.refresh() + with self._exclusive_access: + if self.acquired: + self._lease.refresh() + return True + return False class Etcd3Driver(coordination.CoordinationDriver): |
