mirror of
https://github.com/fluencelabs/redis
synced 2025-03-17 16:10:50 +00:00
Sentinel: distinguish between is-master-down-by-addr requests.
Some are just to know if the master is down, and in this case the runid in the request is set to "*", others are actually in order to seek for a vote and get elected. In the latter case the runid is set to the runid of the instance seeking for the vote.
This commit is contained in:
parent
b22d1beea0
commit
37a51a2568
@ -3108,6 +3108,8 @@ int main(int argc, char **argv) {
|
||||
redisLog(REDIS_NOTICE,"The server is now ready to accept connections on port %d", server.port);
|
||||
if (server.sofd > 0)
|
||||
redisLog(REDIS_NOTICE,"The server is now ready to accept connections at %s", server.unixsocket);
|
||||
} else {
|
||||
redisLog(REDIS_WARNING,"Sentinel runid is %s", server.runid);
|
||||
}
|
||||
|
||||
/* Warning the user about suspicious maxmemory setting. */
|
||||
|
@ -2359,8 +2359,9 @@ void sentinelCommand(redisClient *c) {
|
||||
(ri->flags & SRI_MASTER))
|
||||
isdown = 1;
|
||||
|
||||
/* Vote for the master (or fetch the previous vote) */
|
||||
if (ri && ri->flags & SRI_MASTER) {
|
||||
/* Vote for the master (or fetch the previous vote) if the request
|
||||
* includes a runid, otherwise the sender is not seeking for a vote. */
|
||||
if (ri && ri->flags & SRI_MASTER && strcasecmp(c->argv[5]->ptr,"*")) {
|
||||
leader = sentinelVoteLeader(ri,(uint64_t)req_epoch,
|
||||
c->argv[5]->ptr,
|
||||
&leader_epoch);
|
||||
@ -2370,7 +2371,7 @@ void sentinelCommand(redisClient *c) {
|
||||
* down state, leader, vote epoch. */
|
||||
addReplyMultiBulkLen(c,3);
|
||||
addReply(c, isdown ? shared.cone : shared.czero);
|
||||
addReplyBulkCString(c, leader ? leader : "?");
|
||||
addReplyBulkCString(c, leader ? leader : "*");
|
||||
addReplyLongLong(c, (long long)leader_epoch);
|
||||
if (leader) sdsfree(leader);
|
||||
} else if (!strcasecmp(c->argv[1]->ptr,"reset")) {
|
||||
@ -2605,9 +2606,13 @@ void sentinelReceiveIsMasterDownReply(redisAsyncContext *c, void *reply, void *p
|
||||
} else {
|
||||
ri->flags &= ~SRI_MASTER_DOWN;
|
||||
}
|
||||
sdsfree(ri->leader);
|
||||
ri->leader = sdsnew(r->element[1]->str);
|
||||
ri->leader_epoch = r->element[2]->integer;
|
||||
if (strcmp(r->element[1]->str,"*")) {
|
||||
/* If the runid in the reply is not "*" the Sentinel actually
|
||||
* replied with a vote. */
|
||||
sdsfree(ri->leader);
|
||||
ri->leader = sdsnew(r->element[1]->str);
|
||||
ri->leader_epoch = r->element[2]->integer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2660,7 +2665,8 @@ void sentinelAskMasterStateToOtherSentinels(sentinelRedisInstance *master, int f
|
||||
"SENTINEL is-master-down-by-addr %s %s %llu %s",
|
||||
master->addr->ip, port,
|
||||
sentinel.current_epoch,
|
||||
server.runid);
|
||||
(master->failover_state > SENTINEL_FAILOVER_STATE_NONE) ?
|
||||
server.runid : "*");
|
||||
if (retval == REDIS_OK) ri->pending_commands++;
|
||||
}
|
||||
dictReleaseIterator(di);
|
||||
|
Loading…
x
Reference in New Issue
Block a user