From f438de0fdf17143bd70b5fd8a435edc3629c15b6 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Mon, 23 Jun 2014 18:13:58 +0200 Subject: [PATCH] memcached: use retrying rather than sleeping That should allow better handling of retrying, sleep delays, etc. Change-Id: I7658b4d5bacb0aef84a8c377a7e487327011b7ee --- tooz/drivers/memcached.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/tooz/drivers/memcached.py b/tooz/drivers/memcached.py index d87e1a73..ab41e2ab 100644 --- a/tooz/drivers/memcached.py +++ b/tooz/drivers/memcached.py @@ -17,7 +17,6 @@ # under the License. import collections -import time import msgpack import pymemcache.client @@ -50,19 +49,18 @@ class MemcachedLock(locking.Lock): self.name = self._LOCK_PREFIX + name self.timeout = timeout + @retry def acquire(self, blocking=True): - while True: - if self.coord.client.add( - self.name, - self.coord._member_id, - expire=self.timeout, - noreply=False): - self.coord._acquired_locks.append(self) - return True - if not blocking: - return False - # NOTE(jd) Configurable? :/ - time.sleep(0.11) + if self.coord.client.add( + self.name, + self.coord._member_id, + expire=self.timeout, + noreply=False): + self.coord._acquired_locks.append(self) + return True + if not blocking: + return False + raise Retry def release(self): self.coord._acquired_locks.remove(self)