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
f59ff6fe
Commit
f59ff6fe
authored
Mar 13, 2013
by
antirez
Browse files
Cluster: clusterSendFailoverAuthIfNeeded() work in progress.
parent
44f6fdab
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/cluster.c
View file @
f59ff6fe
...
@@ -1274,16 +1274,43 @@ void clusterRequestFailoverAuth(void) {
...
@@ -1274,16 +1274,43 @@ void clusterRequestFailoverAuth(void) {
clusterBroadcastMessage
(
payload
,
totlen
);
clusterBroadcastMessage
(
payload
,
totlen
);
}
}
/* If we believe '
se
nde
r
' is the "first slave" of it's master, reply with
/* If we believe 'n
o
de' is the "first slave" of it's master, reply with
* a FAILOVER_AUTH_GRANTED packet.
* a FAILOVER_AUTH_GRANTED packet.
*
*
* To be a first slave the sender must:
* To be a first slave the sender must:
* 1) Be a slave.
* 1) Be a slave.
* 2) Its master should be in FAIL state.
* 2) Its master should be in FAIL state.
* 3) Ordering all the slave IDs for its master by run-id, it should be the
* 3) Ordering all the slave
s
IDs for its master by run-id, it should be the
* first (the smallest).
* first (the smallest)
among the ones not in FAIL / PFAIL state
.
*/
*/
void
clusterSendFailoverAuthIfNeeded
(
clusterNode
*
sender
)
{
void
clusterSendFailoverAuthIfNeeded
(
clusterNode
*
node
)
{
char
first
[
REDIS_CLUSTER_NAMELEN
];
clusterNode
*
master
=
node
->
slaveof
;
int
j
;
/* Node is a slave? Its master is down? */
if
(
!
(
node
->
flags
&
REDIS_NODE_SLAVE
)
||
master
==
NULL
||
!
(
master
->
flags
&
REDIS_NODE_FAIL
))
return
;
/* Iterate all the master slaves to check what's the first one. */
memset
(
first
,
0xff
,
sizeof
(
first
));
for
(
j
=
0
;
j
<
master
->
numslaves
;
j
++
)
{
clusterNode
*
slave
=
master
->
slaves
[
j
];
if
(
slave
->
flags
&
(
REDIS_NODE_FAIL
|
REDIS_NODE_PFAIL
))
continue
;
if
(
memcmp
(
slave
->
name
,
first
,
sizeof
(
first
))
<
0
)
{
memcpy
(
first
,
slave
->
name
,
sizeof
(
first
));
}
}
/* Is 'node' the first slave? */
if
(
memcmp
(
node
->
name
,
first
,
sizeof
(
first
))
!=
0
)
return
;
/* We can send the packet. */
/* TODO: send the packet refactoring the code so that we have a
* sendEmtpyPacketWithType() function and broadcastEmptyPacketWithType().
*/
}
}
/* This function is called if we are a slave node and our master serving
/* This function is called if we are a slave node and our master serving
...
...
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