diff options
author | Moti Cohen <moti.cohen@redis.com> | 2022-12-08 19:14:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-08 19:14:21 +0200 |
commit | 4a27aa4875250c075ad2860e9ecc88d77ef6091b (patch) | |
tree | e0a8dc7f683574032e651a479ddb0493c10f626d /src/sentinel.c | |
parent | 049f5d87e368e2de99479c1b7ea813e6832ac74e (diff) | |
download | redis-4a27aa4875250c075ad2860e9ecc88d77ef6091b.tar.gz |
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 <moticless@github.com>
Diffstat (limited to 'src/sentinel.c')
-rw-r--r-- | src/sentinel.c | 11 |
1 files changed, 3 insertions, 8 deletions
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", |