From 4a27aa4875250c075ad2860e9ecc88d77ef6091b Mon Sep 17 00:00:00 2001 From: Moti Cohen Date: Thu, 8 Dec 2022 19:14:21 +0200 Subject: 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 --- src/sentinel.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'src/sentinel.c') diff --git a/src/sentinel.c b/src/sentinel.c index 595a12fea..006d5141b 100644 --- a/src/sentinel.c +++ b/src/sentinel.c @@ -598,11 +598,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. */ @@ -1616,7 +1611,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); @@ -1624,7 +1619,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); } @@ -2175,7 +2170,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", -- cgit v1.2.1