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
72e8f248
Commit
72e8f248
authored
Nov 18, 2015
by
Willem Thiart
Browse files
Only candidates read requestvote responses
parent
763799c5
Changes
2
Show 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