Commit e60bd380 authored by Willem Thiart's avatar Willem Thiart
Browse files

Fix leader stepping down erroneously

parent 41282a13
......@@ -352,14 +352,13 @@ int raft_recv_requestvote(raft_server_t* me_, int node, msg_requestvote_t* vr,
raft_vote(me_, node);
r->vote_granted = 1;
/* there must be in an election. */
me->current_leader = -1;
}
else
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",
node, r->vote_granted == 1 ? "granted" : "not granted");
......
......@@ -458,6 +458,28 @@ void TestRaft_server_recv_requestvote_reply_false_if_term_less_than_current_term
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) */
void TestRaft_server_recv_requestvote_reply_true_if_term_greater_than_or_equal_to_current_term(
CuTest * tc
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment