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
Willemt Raft
Commits
eb9b3e06
Commit
eb9b3e06
authored
Aug 14, 2015
by
Willem Thiart
Browse files
Fixed candidate/leader step down via request vote
parent
903b8eb0
Changes
2
Show whitespace changes
Inline
Side-by-side
src/raft_server.c
View file @
eb9b3e06
...
@@ -353,6 +353,9 @@ int raft_recv_requestvote(raft_server_t* me_, int node, msg_requestvote_t* vr,
...
@@ -353,6 +353,9 @@ int raft_recv_requestvote(raft_server_t* me_, int node, msg_requestvote_t* vr,
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
if
(
raft_get_current_term
(
me_
)
<
vr
->
term
)
raft_become_follower
(
me_
);
if
(
__should_grant_vote
(
me
,
vr
))
if
(
__should_grant_vote
(
me
,
vr
))
{
{
/* It shouldn't be possible for a leader or candidate to grant a vote
/* It shouldn't be possible for a leader or candidate to grant a vote
...
...
tests/test_server.c
View file @
eb9b3e06
...
@@ -452,6 +452,26 @@ void TestRaft_server_recv_requestvote_reply_true_if_term_greater_than_or_equal_t
...
@@ -452,6 +452,26 @@ void TestRaft_server_recv_requestvote_reply_true_if_term_greater_than_or_equal_t
CuAssertTrue(tc, 1 == rvr.vote_granted);
CuAssertTrue(tc, 1 == rvr.vote_granted);
}
}
void TestRaft_server_recv_requestvote_candidate_step_down_if_term_is_higher_than_current_term(
CuTest * tc
)
{
void *r = raft_new();
raft_add_peer(r, (void*)1, 1);
raft_add_peer(r, (void*)2, 0);
raft_become_candidate(r);
raft_set_current_term(r, 1);
/* current term is less than term */
msg_requestvote_t rv;
memset(&rv, 0, sizeof(msg_requestvote_t));
rv.term = 2;
rv.last_log_idx = 1;
msg_requestvote_response_t rvr;
raft_recv_requestvote(r, 1, &rv, &rvr);
CuAssertTrue(tc, 1 == raft_is_follower(r));
}
/* If votedFor is null or candidateId, and candidate's log is at
/* If votedFor is null or candidateId, and candidate's log is at
* least as up-to-date as local log, grant vote (5.2, 5.4) */
* least as up-to-date as local log, grant vote (5.2, 5.4) */
void TestRaft_server_dont_grant_vote_if_we_didnt_vote_for_this_candidate(
void TestRaft_server_dont_grant_vote_if_we_didnt_vote_for_this_candidate(
...
...
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