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
72e8f248
Commit
72e8f248
authored
Nov 18, 2015
by
Willem Thiart
Browse files
Only candidates read requestvote responses
parent
763799c5
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/raft_server.c
View file @
72e8f248
...
@@ -116,6 +116,7 @@ void raft_become_candidate(raft_server_t* me_)
...
@@ -116,6 +116,7 @@ void raft_become_candidate(raft_server_t* me_)
raft_set_state
(
me_
,
RAFT_STATE_CANDIDATE
);
raft_set_state
(
me_
,
RAFT_STATE_CANDIDATE
);
/* we need a random factor here to prevent simultaneous candidates */
/* we need a random factor here to prevent simultaneous candidates */
/* TODO: this should probably be lower */
me
->
timeout_elapsed
=
rand
()
%
me
->
election_timeout
;
me
->
timeout_elapsed
=
rand
()
%
me
->
election_timeout
;
for
(
i
=
0
;
i
<
me
->
num_nodes
;
i
++
)
for
(
i
=
0
;
i
<
me
->
num_nodes
;
i
++
)
...
@@ -454,7 +455,7 @@ int raft_recv_requestvote_response(raft_server_t* me_,
...
@@ -454,7 +455,7 @@ int raft_recv_requestvote_response(raft_server_t* me_,
__log
(
me_
,
"node responded to requestvote: %d status: %s"
,
__log
(
me_
,
"node responded to requestvote: %d status: %s"
,
node
,
r
->
vote_granted
==
1
?
"granted"
:
"not granted"
);
node
,
r
->
vote_granted
==
1
?
"granted"
:
"not granted"
);
if
(
raft_is_
leader
(
me_
))
if
(
!
raft_is_
candidate
(
me_
))
return
0
;
return
0
;
assert
(
node
<
me
->
num_nodes
);
assert
(
node
<
me
->
num_nodes
);
...
...
tests/test_server.c
View file @
72e8f248
...
@@ -444,6 +444,8 @@ void TestRaft_server_recv_requestvote_response_increase_votes_for_me(
...
@@ -444,6 +444,8 @@ void TestRaft_server_recv_requestvote_response_increase_votes_for_me(
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
CuAssertTrue
(
tc
,
0
==
raft_get_nvotes_for_me
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_nvotes_for_me
(
r
));
raft_become_candidate
(
r
);
msg_requestvote_response_t
rvr
;
msg_requestvote_response_t
rvr
;
memset
(
&
rvr
,
0
,
sizeof
(
msg_requestvote_response_t
));
memset
(
&
rvr
,
0
,
sizeof
(
msg_requestvote_response_t
));
rvr
.
term
=
1
;
rvr
.
term
=
1
;
...
@@ -452,6 +454,26 @@ void TestRaft_server_recv_requestvote_response_increase_votes_for_me(
...
@@ -452,6 +454,26 @@ void TestRaft_server_recv_requestvote_response_increase_votes_for_me(
CuAssertTrue
(
tc
,
1
==
raft_get_nvotes_for_me
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_nvotes_for_me
(
r
));
}
}
void
TestRaft_server_recv_requestvote_response_must_be_candidate_to_receive
(
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
);
CuAssertTrue
(
tc
,
0
==
raft_get_nvotes_for_me
(
r
));
raft_become_leader
(
r
);
msg_requestvote_response_t
rvr
;
memset
(
&
rvr
,
0
,
sizeof
(
msg_requestvote_response_t
));
rvr
.
term
=
1
;
rvr
.
vote_granted
=
1
;
raft_recv_requestvote_response
(
r
,
1
,
&
rvr
);
CuAssertTrue
(
tc
,
0
==
raft_get_nvotes_for_me
(
r
));
}
/* Reply false if term < currentTerm (5.1) */
/* Reply false if term < currentTerm (5.1) */
void
TestRaft_server_recv_requestvote_reply_false_if_term_less_than_current_term
(
void
TestRaft_server_recv_requestvote_reply_false_if_term_less_than_current_term
(
CuTest
*
tc
CuTest
*
tc
...
@@ -1168,7 +1190,7 @@ void TestRaft_follower_becoming_candidate_resets_election_timeout(CuTest * tc)
...
@@ -1168,7 +1190,7 @@ void TestRaft_follower_becoming_candidate_resets_election_timeout(CuTest * tc)
raft_become_candidate
(
r
);
raft_become_candidate
(
r
);
/* time is selected randomly */
/* time is selected randomly */
CuAssertTrue
(
tc
,
raft_get_timeout_elapsed
(
r
)
<
9
00
);
CuAssertTrue
(
tc
,
raft_get_timeout_elapsed
(
r
)
<
10
00
);
}
}
void
TestRaft_follower_recv_appendentries_resets_election_timeout
(
void
TestRaft_follower_recv_appendentries_resets_election_timeout
(
...
...
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