Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
8204ab00
You need to sign in or sign up before continuing.
Commit
8204ab00
authored
Jun 10, 2014
by
antirez
Browse files
Cluster: log when a master denies a failover auth.
parent
64e6d7af
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/cluster.c
View file @
8204ab00
...
@@ -2288,22 +2288,57 @@ void clusterSendFailoverAuthIfNeeded(clusterNode *node, clusterMsg *request) {
...
@@ -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) {
...
@@ -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
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment