Commit 794628d4 authored by Willem Thiart's avatar Willem Thiart
Browse files

raft_recv_appendentries accepts NULL node

parent 36adcc92
......@@ -167,9 +167,6 @@ int raft_recv_appendentries_response(raft_server_t* me_,
{
raft_server_private_t* me = (raft_server_private_t*)me_;
assert(node);
assert(node != me->node);
__log(me_, node,
"received appendentries response %s ci:%d rci:%d 1stidx:%d",
r->success == 1 ? "SUCCESS" : "fail",
......@@ -195,6 +192,10 @@ int raft_recv_appendentries_response(raft_server_t* me_,
else if (me->current_term != r->term)
return 0;
/* stop processing, this is a node we don't have in our configuration */
if (!node)
return 0;
if (0 == r->success)
{
/* If AppendEntries fails because of log inconsistency:
......@@ -268,9 +269,6 @@ int raft_recv_appendentries(
{
raft_server_private_t* me = (raft_server_private_t*)me_;
assert(node);
assert(node != me->node);
me->timeout_elapsed = 0;
if (0 < ae->n_entries)
......@@ -528,7 +526,8 @@ int raft_recv_entry(raft_server_t* me_,
raft_append_entry(me_, &ety);
for (i = 0; i < me->num_nodes; i++)
{
if (me->node == me->nodes[i] || !raft_node_is_voting(me->nodes[i]))
if (me->node == me->nodes[i] || !me->nodes[i] ||
!raft_node_is_voting(me->nodes[i]))
continue;
/* Only send new entries.
......
......@@ -694,6 +694,18 @@ void TestRaft_follower_recv_appendentries_reply_false_if_term_less_than_currentt
CuAssertTrue(tc, -1 == raft_get_current_leader(r));
}
void TestRaft_follower_recv_appendentries_does_not_need_node(CuTest * tc)
{
void *r = raft_new();
raft_add_node(r, NULL, 1, 1);
raft_add_node(r, NULL, 2, 0);
msg_appendentries_t ae = {};
ae.term = 1;
msg_appendentries_response_t aer;
raft_recv_appendentries(r, NULL, &ae, &aer);
CuAssertTrue(tc, 1 == aer.success);
}
/* TODO: check if test case is needed */
void TestRaft_follower_recv_appendentries_updates_currentterm_if_term_gt_currentterm(
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