From 3ebace932dd50ea5a6dc5ff971eb8f8fbde1fc56 Mon Sep 17 00:00:00 2001 From: Moti Cohen Date: Thu, 8 Dec 2022 19:14:21 +0200 Subject: [PATCH] Fix sentinel issue if replica changes IP (#11590) As Sentinel supports dynamic IP only when using hostnames, there are few leftover addess comparison logic that doesn't take into account that the IP might get change. Co-authored-by: moticless (cherry picked from commit 4a27aa4875250c075ad2860e9ecc88d77ef6091b) --- src/sentinel.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/sentinel.c b/src/sentinel.c index 09fec69fc..cfa091c2b 100644 --- a/src/sentinel.c +++ b/src/sentinel.c @@ -640,11 +640,6 @@ void releaseSentinelAddr(sentinelAddr *sa) { zfree(sa); } -/* Return non-zero if two addresses are equal. */ -int sentinelAddrIsEqual(sentinelAddr *a, sentinelAddr *b) { - return a->port == b->port && !strcasecmp(a->ip,b->ip); -} - /* Return non-zero if the two addresses are equal, either by address * or by hostname if they could not have been resolved. */ @@ -1664,7 +1659,7 @@ int sentinelResetMasterAndChangeAddress(sentinelRedisInstance *master, char *hos while((de = dictNext(di)) != NULL) { sentinelRedisInstance *slave = dictGetVal(de); - if (sentinelAddrIsEqual(slave->addr,newaddr)) continue; + if (sentinelAddrOrHostnameEqual(slave->addr,newaddr)) continue; slaves[numslaves++] = dupSentinelAddr(slave->addr); } dictReleaseIterator(di); @@ -1672,7 +1667,7 @@ int sentinelResetMasterAndChangeAddress(sentinelRedisInstance *master, char *hos /* If we are switching to a different address, include the old address * as a slave as well, so that we'll be able to sense / reconfigure * the old master. */ - if (!sentinelAddrIsEqual(newaddr,master->addr)) { + if (!sentinelAddrOrHostnameEqual(newaddr,master->addr)) { slaves[numslaves++] = dupSentinelAddr(master->addr); } @@ -2221,7 +2216,7 @@ void rewriteConfigSentinelOption(struct rewriteConfigState *state) { * slave's address, a failover is in progress and the slave was * already successfully promoted. So as the address of this slave * we use the old master address instead. */ - if (sentinelAddrIsEqual(slave_addr,master_addr)) + if (sentinelAddrOrHostnameEqual(slave_addr,master_addr)) slave_addr = master->addr; line = sdscatprintf(sdsempty(), "sentinel known-replica %s %s %d",