Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Willemt Raft
Commits
54eb26df
Commit
54eb26df
authored
Aug 10, 2015
by
Willem Thiart
Browse files
Refactored vote granted check
parent
f297457a
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/raft_server.c
View file @
54eb26df
...
@@ -117,7 +117,6 @@ void raft_become_candidate(raft_server_t* me_)
...
@@ -117,7 +117,6 @@ void raft_become_candidate(raft_server_t* me_)
for
(
i
=
0
;
i
<
me
->
num_nodes
;
i
++
)
for
(
i
=
0
;
i
<
me
->
num_nodes
;
i
++
)
if
(
me
->
nodeid
!=
i
)
if
(
me
->
nodeid
!=
i
)
raft_send_requestvote
(
me_
,
i
);
raft_send_requestvote
(
me_
,
i
);
}
}
void
raft_become_follower
(
raft_server_t
*
me_
)
void
raft_become_follower
(
raft_server_t
*
me_
)
...
@@ -170,7 +169,8 @@ int raft_recv_appendentries_response(raft_server_t* me_,
...
@@ -170,7 +169,8 @@ int raft_recv_appendentries_response(raft_server_t* me_,
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
__log
(
me_
,
"received appendentries response from: %d success: %d"
,
node
,
r
->
success
);
__log
(
me_
,
"received appendentries response node: %d %s cidx: %d 1stidx: %d"
,
node
,
r
->
success
==
1
?
"success"
:
"fail"
,
r
->
current_idx
,
r
->
first_idx
);
raft_node_t
*
p
=
raft_get_node
(
me_
,
node
);
raft_node_t
*
p
=
raft_get_node
(
me_
,
node
);
...
@@ -332,6 +332,22 @@ int raft_recv_appendentries(
...
@@ -332,6 +332,22 @@ int raft_recv_appendentries(
return
0
;
return
0
;
}
}
static
int
__should_grant_vote
(
raft_server_private_t
*
me
,
msg_requestvote_t
*
vr
)
{
if
(
vr
->
term
<
raft_get_current_term
((
void
*
)
me
))
return
0
;
/* we've already voted */
if
(
-
1
!=
me
->
voted_for
)
return
0
;
/* we have a more up-to-date log */
if
(
vr
->
last_log_idx
<
me
->
current_idx
)
return
0
;
return
1
;
}
int
raft_recv_requestvote
(
raft_server_t
*
me_
,
int
node
,
msg_requestvote_t
*
vr
,
int
raft_recv_requestvote
(
raft_server_t
*
me_
,
int
node
,
msg_requestvote_t
*
vr
,
msg_requestvote_response_t
*
r
)
msg_requestvote_response_t
*
r
)
{
{
...
@@ -340,17 +356,13 @@ int raft_recv_requestvote(raft_server_t* me_, int node, msg_requestvote_t* vr,
...
@@ -340,17 +356,13 @@ int raft_recv_requestvote(raft_server_t* me_, int node, msg_requestvote_t* vr,
if
(
raft_get_current_term
(
me_
)
<
vr
->
term
)
if
(
raft_get_current_term
(
me_
)
<
vr
->
term
)
me
->
voted_for
=
-
1
;
me
->
voted_for
=
-
1
;
if
(
vr
->
term
<
raft_get_current_term
(
me_
)
||
if
(
__should_grant_vote
(
me
,
vr
))
/* we've already voted */
-
1
!=
me
->
voted_for
||
/* we have a more up-to-date log */
vr
->
last_log_idx
<
me
->
current_idx
)
r
->
vote_granted
=
0
;
else
{
{
raft_vote
(
me_
,
node
);
raft_vote
(
me_
,
node
);
r
->
vote_granted
=
1
;
r
->
vote_granted
=
1
;
}
}
else
r
->
vote_granted
=
0
;
/* voted for someone, therefore must be in an election. */
/* voted for someone, therefore must be in an election. */
if
(
0
<=
me
->
voted_for
)
if
(
0
<=
me
->
voted_for
)
...
@@ -475,8 +487,6 @@ void raft_send_appendentries(raft_server_t* me_, int node)
...
@@ -475,8 +487,6 @@ void raft_send_appendentries(raft_server_t* me_, int node)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
__log
(
me_
,
"sending appendentries to: %d"
,
node
);
if
(
!
(
me
->
cb
.
send_appendentries
))
if
(
!
(
me
->
cb
.
send_appendentries
))
return
;
return
;
...
@@ -516,6 +526,13 @@ void raft_send_appendentries(raft_server_t* me_, int node)
...
@@ -516,6 +526,13 @@ void raft_send_appendentries(raft_server_t* me_, int node)
}
}
}
}
__log
(
me_
,
"sending appendentries node: %d, %d %d %d %d"
,
node
,
ae
.
term
,
ae
.
leader_commit
,
ae
.
prev_log_idx
,
ae
.
prev_log_term
);
me
->
cb
.
send_appendentries
(
me_
,
me
->
udata
,
node
,
&
ae
);
me
->
cb
.
send_appendentries
(
me_
,
me
->
udata
,
node
,
&
ae
);
}
}
...
...
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