mirror of
https://github.com/fluencelabs/redis
synced 2025-03-30 22:31:03 +00:00
Cluster: log when a master denies a failover auth.
This commit is contained in:
parent
64e6d7af47
commit
8204ab0098
@ -2288,22 +2288,57 @@ void clusterSendFailoverAuthIfNeeded(clusterNode *node, clusterMsg *request) {
|
|||||||
if (nodeIsSlave(myself) || myself->numslots == 0) return;
|
if (nodeIsSlave(myself) || myself->numslots == 0) return;
|
||||||
|
|
||||||
/* Request epoch must be >= our currentEpoch. */
|
/* Request epoch must be >= our currentEpoch. */
|
||||||
if (requestCurrentEpoch < server.cluster->currentEpoch) return;
|
if (requestCurrentEpoch < server.cluster->currentEpoch) {
|
||||||
|
redisLog(REDIS_WARNING,
|
||||||
|
"Failover auth denied to %.40s: reqEpoch (%llu) < curEpoch(%llu)",
|
||||||
|
node->name,
|
||||||
|
(unsigned long long) requestCurrentEpoch,
|
||||||
|
(unsigned long long) server.cluster->currentEpoch);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* I already voted for this epoch? Return ASAP. */
|
/* I already voted for this epoch? Return ASAP. */
|
||||||
if (server.cluster->lastVoteEpoch == server.cluster->currentEpoch) return;
|
if (server.cluster->lastVoteEpoch == server.cluster->currentEpoch) {
|
||||||
|
redisLog(REDIS_WARNING,
|
||||||
|
"Failover auth denied to %.40s: already voted for epoch %llu",
|
||||||
|
node->name,
|
||||||
|
(unsigned long long) server.cluster->currentEpoch);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Node must be a slave and its master down.
|
/* Node must be a slave and its master down.
|
||||||
* The master can be non failing if the request is flagged
|
* The master can be non failing if the request is flagged
|
||||||
* with CLUSTERMSG_FLAG0_FORCEACK (manual failover). */
|
* with CLUSTERMSG_FLAG0_FORCEACK (manual failover). */
|
||||||
if (nodeIsMaster(node) || master == NULL ||
|
if (nodeIsMaster(node) || master == NULL ||
|
||||||
(!nodeFailed(master) && !force_ack)) return;
|
(!nodeFailed(master) && !force_ack))
|
||||||
|
{
|
||||||
|
if (nodeIsMaster(node)) {
|
||||||
|
redisLog(REDIS_WARNING,
|
||||||
|
"Failover auth denied to %.40s: it is a master node",
|
||||||
|
node->name);
|
||||||
|
} else if (master == NULL) {
|
||||||
|
redisLog(REDIS_WARNING,
|
||||||
|
"Failover auth denied to %.40s: I don't know its master",
|
||||||
|
node->name);
|
||||||
|
} else if (!nodeFailed(master)) {
|
||||||
|
redisLog(REDIS_WARNING,
|
||||||
|
"Failover auth denied to %.40s: its master is up",
|
||||||
|
node->name);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* We did not voted for a slave about this master for two
|
/* We did not voted for a slave about this master for two
|
||||||
* times the node timeout. This is not strictly needed for correctness
|
* times the node timeout. This is not strictly needed for correctness
|
||||||
* of the algorithm but makes the base case more linear. */
|
* of the algorithm but makes the base case more linear. */
|
||||||
if (mstime() - node->slaveof->voted_time < server.cluster_node_timeout * 2)
|
if (mstime() - node->slaveof->voted_time < server.cluster_node_timeout * 2)
|
||||||
|
{
|
||||||
|
redisLog(REDIS_WARNING,
|
||||||
|
"Failover auth denied to %.40s: already voted for epoch %llu",
|
||||||
|
node->name,
|
||||||
|
(unsigned long long) server.cluster->currentEpoch);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* The slave requesting the vote must have a configEpoch for the claimed
|
/* The slave requesting the vote must have a configEpoch for the claimed
|
||||||
* slots that is >= the one of the masters currently serving the same
|
* slots that is >= the one of the masters currently serving the same
|
||||||
@ -2318,6 +2353,12 @@ void clusterSendFailoverAuthIfNeeded(clusterNode *node, clusterMsg *request) {
|
|||||||
/* If we reached this point we found a slot that in our current slots
|
/* If we reached this point we found a slot that in our current slots
|
||||||
* is served by a master with a greater configEpoch than the one claimed
|
* is served by a master with a greater configEpoch than the one claimed
|
||||||
* by the slave requesting our vote. Refuse to vote for this slave. */
|
* by the slave requesting our vote. Refuse to vote for this slave. */
|
||||||
|
redisLog(REDIS_WARNING,
|
||||||
|
"Failover auth denied to %.40s: "
|
||||||
|
"slot %d epoch (%llu) > reqEpoch (%llu)",
|
||||||
|
node->name, j,
|
||||||
|
(unsigned long long) server.cluster->slots[j]->configEpoch,
|
||||||
|
(unsigned long long) requestConfigEpoch);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user