Skip to content

Commit 1fd977f

Browse files
committed
Move retries to SentinelManagedConnection
Signed-off-by: Jonathan Dieter <[email protected]>
1 parent 4a48217 commit 1fd977f

File tree

1 file changed

+7
-28
lines changed

1 file changed

+7
-28
lines changed

redis/sentinel.py

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
1-
import copy
21
import random
32
import weakref
43

5-
from redis.backoff import NoBackoff
64
from redis.client import Redis
75
from redis.commands import SentinelCommands
86
from redis.connection import Connection, ConnectionPool, SSLConnection
97
from redis.exceptions import ConnectionError, ReadOnlyError, ResponseError, TimeoutError
10-
from redis.retry import Retry
118
from redis.utils import str_if_bytes
129

1310

@@ -40,7 +37,7 @@ def connect_to(self, address):
4037
if str_if_bytes(self.read_response()) != "PONG":
4138
raise ConnectionError("PING failed")
4239

43-
def connect(self):
40+
def _connect_retry(self):
4441
if self._sock:
4542
return # already connected
4643
if self.connection_pool.is_master:
@@ -53,6 +50,12 @@ def connect(self):
5350
continue
5451
raise SlaveNotFoundError # Never be here
5552

53+
def connect(self):
54+
return self.retry.call_with_retry(
55+
self._connect_retry,
56+
lambda error: None,
57+
)
58+
5659
def read_response(self, disable_decoding=False):
5760
try:
5861
return super().read_response(disable_decoding=disable_decoding)
@@ -87,24 +90,6 @@ def __init__(self, service_name, sentinel_manager, **kwargs):
8790
if kwargs.pop("ssl", False)
8891
else SentinelManagedConnection,
8992
)
90-
retry = kwargs.get("retry", None)
91-
retry_on_error = kwargs.get("retry_on_error", None)
92-
retry_on_timeout = kwargs.get("retry_on_timeout", False)
93-
self.retry_on_timeout = retry_on_timeout
94-
if retry_on_timeout:
95-
# Add TimeoutError to the errors list to retry on
96-
retry_on_error.append(TimeoutError)
97-
self.retry_on_error = retry_on_error
98-
if retry_on_error:
99-
if retry is None:
100-
self.retry = Retry(NoBackoff(), 1)
101-
else:
102-
# deep-copy the Retry object as it is mutable
103-
self.retry = copy.deepcopy(retry)
104-
# Update the retry's supported errors with the specified errors
105-
self.retry.update_supported_erros(retry_on_error)
106-
else:
107-
self.retry = Retry(NoBackoff(), 0)
10893
self.is_master = kwargs.pop("is_master", True)
10994
self.check_connection = kwargs.pop("check_connection", False)
11095
super().__init__(**kwargs)
@@ -128,12 +113,6 @@ def owns_connection(self, connection):
128113
parent = super()
129114
return check and parent.owns_connection(connection)
130115

131-
def get_connection(self, *args, **kwargs):
132-
return self.retry.call_with_retry(
133-
lambda: super(type(self), self).get_connection(self, *args, **kwargs),
134-
lambda error: None,
135-
)
136-
137116
def get_master_address(self):
138117
master_address = self.sentinel_manager.discover_master(self.service_name)
139118
if self.is_master:

0 commit comments

Comments
 (0)