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