summaryrefslogtreecommitdiff
path: root/redis/sentinel.py
diff options
context:
space:
mode:
Diffstat (limited to 'redis/sentinel.py')
-rw-r--r--redis/sentinel.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/redis/sentinel.py b/redis/sentinel.py
index 3857c88..2b212ea 100644
--- a/redis/sentinel.py
+++ b/redis/sentinel.py
@@ -95,16 +95,22 @@ class SentinelConnectionPool(ConnectionPool):
self.master_address = None
self.slave_rr_counter = None
+ def owns_connection(self, connection):
+ check = not self.is_master or \
+ (self.is_master and
+ self.master_address == (connection.host, connection.port))
+ parent = super(SentinelConnectionPool, self)
+ return check and parent.owns_connection(connection)
+
def get_master_address(self):
master_address = self.sentinel_manager.discover_master(
self.service_name)
if self.is_master:
- if self.master_address is None:
- self.master_address = master_address
- elif master_address != self.master_address:
- # Master address changed, disconnect all clients in this pool
+ if self.master_address != master_address:
self.master_address = master_address
- self.disconnect()
+ # disconnect any idle connections so that they reconnect
+ # to the new master the next time that they are used.
+ self.disconnect(inuse_connections=False)
return master_address
def rotate_slaves(self):