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
e60bd380
Commit
e60bd380
authored
Nov 10, 2015
by
Willem Thiart
Browse files
Fix leader stepping down erroneously
parent
41282a13
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/raft_server.c
View file @
e60bd380
...
@@ -352,14 +352,13 @@ int raft_recv_requestvote(raft_server_t* me_, int node, msg_requestvote_t* vr,
...
@@ -352,14 +352,13 @@ int raft_recv_requestvote(raft_server_t* me_, int node, msg_requestvote_t* vr,
raft_vote
(
me_
,
node
);
raft_vote
(
me_
,
node
);
r
->
vote_granted
=
1
;
r
->
vote_granted
=
1
;
/* there must be in an election. */
me
->
current_leader
=
-
1
;
}
}
else
else
r
->
vote_granted
=
0
;
r
->
vote_granted
=
0
;
/* voted for someone, therefore must be in an election. */
if
(
0
<=
me
->
voted_for
)
me
->
current_leader
=
-
1
;
__log
(
me_
,
"node requested vote: %d replying: %s"
,
__log
(
me_
,
"node requested vote: %d replying: %s"
,
node
,
r
->
vote_granted
==
1
?
"granted"
:
"not granted"
);
node
,
r
->
vote_granted
==
1
?
"granted"
:
"not granted"
);
...
...
tests/test_server.c
View file @
e60bd380
...
@@ -458,6 +458,28 @@ void TestRaft_server_recv_requestvote_reply_false_if_term_less_than_current_term
...
@@ -458,6 +458,28 @@ void TestRaft_server_recv_requestvote_reply_false_if_term_less_than_current_term
CuAssertTrue
(
tc
,
0
==
rvr
.
vote_granted
);
CuAssertTrue
(
tc
,
0
==
rvr
.
vote_granted
);
}
}
void
TestRaft_leader_recv_requestvote_does_not_step_down
(
CuTest
*
tc
)
{
msg_requestvote_response_t
rvr
;
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_vote
(
r
,
0
);
raft_become_leader
(
r
);
CuAssertIntEquals
(
tc
,
1
,
raft_is_leader
(
r
));
/* term is less than current term */
msg_requestvote_t
rv
;
memset
(
&
rv
,
0
,
sizeof
(
msg_requestvote_t
));
rv
.
term
=
1
;
raft_recv_requestvote
(
r
,
1
,
&
rv
,
&
rvr
);
CuAssertIntEquals
(
tc
,
0
,
raft_get_current_leader
(
r
));
}
/* Reply true if term >= currentTerm (5.1) */
/* Reply true if term >= currentTerm (5.1) */
void
TestRaft_server_recv_requestvote_reply_true_if_term_greater_than_or_equal_to_current_term
(
void
TestRaft_server_recv_requestvote_reply_true_if_term_greater_than_or_equal_to_current_term
(
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