diff --git a/redlock/__init__.py b/redlock/__init__.py index 70795f5..563110d 100644 --- a/redlock/__init__.py +++ b/redlock/__init__.py @@ -65,8 +65,14 @@ def __init__(self, connection_list, retry_count=None, retry_delay=None): if len(self.servers) < self.quorum: raise CannotObtainLock( "Failed to connect to the majority of redis servers") - self.retry_count = retry_count or self.default_retry_count - self.retry_delay = retry_delay or self.default_retry_delay + + self.retry_count = retry_count + if self.retry_count is None: + self.retry_count = self.default_retry_count + + self.retry_delay = retry_delay + if self.retry_delay is None: + self.retry_delay = self.default_retry_delay def lock_instance(self, server, resource, val, ttl): try: @@ -95,7 +101,8 @@ def lock(self, resource, ttl): drift = int(ttl * self.clock_drift_factor) + 2 redis_errors = list() - while retry < self.retry_count: + restart_attempt = True + while restart_attempt: n = 0 start_time = int(time.time() * 1000) del redis_errors[:] @@ -117,8 +124,12 @@ def lock(self, resource, ttl): self.unlock_instance(server, resource, val) except: pass + retry += 1 - time.sleep(self.retry_delay) + restart_attempt = retry < self.retry_count + if restart_attempt: + time.sleep(self.retry_delay) + return False def unlock(self, lock):