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
RedisLabs Raft
Commits
0baa4b07
Commit
0baa4b07
authored
Nov 15, 2015
by
Willem Thiart
Browse files
Step down if requestvote response has higher term
parent
75b01044
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/raft_server.c
View file @
0baa4b07
...
@@ -404,9 +404,12 @@ int raft_recv_requestvote_response(raft_server_t* me_, int node,
...
@@ -404,9 +404,12 @@ int raft_recv_requestvote_response(raft_server_t* me_, int node,
assert
(
node
<
me
->
num_nodes
);
assert
(
node
<
me
->
num_nodes
);
// TODO: if invalid leader then stepdown
if
(
raft_get_current_term
(
me_
)
<
r
->
term
)
// if (r->term != raft_get_current_term(me_))
{
// return 0;
raft_set_current_term
(
me_
,
r
->
term
);
raft_become_follower
(
me_
);
return
0
;
}
if
(
1
==
r
->
vote_granted
)
if
(
1
==
r
->
vote_granted
)
{
{
...
...
tests/test_server.c
View file @
0baa4b07
...
@@ -401,7 +401,7 @@ void TestRaft_votes_are_majority_is_true(
...
@@ -401,7 +401,7 @@ void TestRaft_votes_are_majority_is_true(
CuAssertTrue
(
tc
,
0
==
raft_votes_is_majority
(
1
,
2
));
CuAssertTrue
(
tc
,
0
==
raft_votes_is_majority
(
1
,
2
));
}
}
void
TestRaft_server_dont_increase_votes_for_me_when_
receive_request_vote_response_is_
not_granted
(
void
TestRaft_server_
recv_requestvote_response_
dont_increase_votes_for_me_when_not_granted
(
CuTest
*
tc
CuTest
*
tc
)
)
{
{
...
@@ -419,7 +419,7 @@ void TestRaft_server_dont_increase_votes_for_me_when_receive_request_vote_respon
...
@@ -419,7 +419,7 @@ void TestRaft_server_dont_increase_votes_for_me_when_receive_request_vote_respon
CuAssertTrue
(
tc
,
0
==
raft_get_nvotes_for_me
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_nvotes_for_me
(
r
));
}
}
void
TestRaft_server_
increase_votes_for_me_when_receive_request_vote_respons
e
(
void
TestRaft_server_
recv_requestvote_response_increase_votes_for_m
e
(
CuTest
*
tc
CuTest
*
tc
)
)
{
{
...
@@ -1213,6 +1213,30 @@ void TestRaft_candidate_requestvote_includes_logidx(CuTest * tc)
...
@@ -1213,6 +1213,30 @@ void TestRaft_candidate_requestvote_includes_logidx(CuTest * tc)
CuAssertTrue
(
tc
,
1
==
rv
->
candidate_id
);
CuAssertTrue
(
tc
,
1
==
rv
->
candidate_id
);
}
}
void
TestRaft_candidate_recv_requestvote_response_becomes_follower_if_current_term_is_less_than_term
(
CuTest
*
tc
)
{
void
*
r
=
raft_new
();
raft_add_node
(
r
,
(
void
*
)
1
,
1
);
raft_add_node
(
r
,
(
void
*
)
2
,
0
);
raft_set_current_term
(
r
,
1
);
raft_set_state
(
r
,
RAFT_STATE_CANDIDATE
);
raft_vote
(
r
,
0
);
CuAssertTrue
(
tc
,
0
==
raft_is_follower
(
r
));
CuAssertTrue
(
tc
,
-
1
==
raft_get_current_leader
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_current_term
(
r
));
msg_requestvote_response_t
rvr
;
memset
(
&
rvr
,
0
,
sizeof
(
msg_requestvote_response_t
));
rvr
.
term
=
2
;
rvr
.
vote_granted
=
0
;
raft_recv_requestvote_response
(
r
,
1
,
&
rvr
);
CuAssertTrue
(
tc
,
1
==
raft_is_follower
(
r
));
CuAssertTrue
(
tc
,
2
==
raft_get_current_term
(
r
));
CuAssertTrue
(
tc
,
-
1
==
raft_get_voted_for
(
r
));
}
/* Candidate 5.2 */
/* Candidate 5.2 */
void
TestRaft_candidate_recv_appendentries_frm_leader_results_in_follower
(
void
TestRaft_candidate_recv_appendentries_frm_leader_results_in_follower
(
CuTest
*
tc
)
CuTest
*
tc
)
...
...
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