diff --git a/src/raft_server.c b/src/raft_server.c index deafb1fa..c954d144 100644 --- a/src/raft_server.c +++ b/src/raft_server.c @@ -1396,8 +1396,10 @@ int raft_begin_load_snapshot( { if (raft_get_nodeid(me_) == raft_node_get_id(me->nodes[i])) my_node_by_idx = i; - else - raft_node_set_active(me->nodes[i], 0); + else { + raft_node_free(me->nodes[i]); + me->nodes[i] = NULL; + } } /* this will be realloc'd by a raft_add_node */ diff --git a/tests/test_snapshotting.c b/tests/test_snapshotting.c index 25997b40..3907669d 100644 --- a/tests/test_snapshotting.c +++ b/tests/test_snapshotting.c @@ -540,6 +540,10 @@ void TestRaft_leader_sends_appendentries_when_node_next_index_was_compacted(CuTe CuAssertIntEquals(tc, 0, raft_end_load_snapshot(r)); CuAssertIntEquals(tc, 3, raft_get_current_idx(r)); + /* reconfigure nodes based on config data "embedded in snapshot" */ + node = raft_add_node(r, NULL, 2, 0); + raft_add_node(r, NULL, 3, 0); + /* node wants an entry that was compacted */ raft_node_set_next_idx(node, raft_get_current_idx(r)); @@ -682,7 +686,10 @@ void TestRaft_leader_sends_appendentries_with_correct_prev_log_idx_when_snapshot /* i'm leader */ raft_set_state(r, RAFT_STATE_LEADER); - raft_node_t* p = raft_get_node_from_idx(r, 1); + /* reload node configuration; we expect the app to decode it from + * the loaded snapshot. + */ + raft_node_t* p = raft_add_node(r, NULL, 2, 0); CuAssertTrue(tc, NULL != p); raft_node_set_next_idx(p, 4);