diff --git a/src/sentinel.c b/src/sentinel.c index c693a58627..ba522e6183 100644 --- a/src/sentinel.c +++ b/src/sentinel.c @@ -3244,8 +3244,13 @@ char *sentinelVoteLeader(sentinelRedisInstance *master, uint64_t req_epoch, char if (master->leader_epoch < req_epoch && sentinel.current_epoch <= req_epoch) { - sdsfree(master->leader); - master->leader = sdsnew(req_runid); + mstime_t time_since_last_vote = mstime() - master->failover_start_time; + if (time_since_last_vote > master->failover_timeout || + strcasecmp(req_runid,server.runid) == 0 || + master->leader == NULL) { + sdsfree(master->leader); + master->leader = sdsnew(req_runid); + } master->leader_epoch = sentinel.current_epoch; sentinelFlushConfig(); sentinelEvent(REDIS_WARNING,"+vote-for-leader",master,"%s %llu",