Commit 077e09bd authored by Willem Thiart's avatar Willem Thiart
Browse files

raft_add_node makes non-voting node voting

parent bc65dc49
......@@ -666,10 +666,13 @@ raft_node_t* raft_add_node(raft_server_t* me_, void* udata, int id, int is_self)
{
raft_server_private_t* me = (raft_server_private_t*)me_;
/* TODO: does not yet support dynamic membership changes */
if (me->current_term != 0 && me->timeout_elapsed != 0 &&
me->election_timeout != 0)
return NULL;
/* set to voting if node already exists */
raft_node_t* node = raft_get_node(me_, id);
if (node)
{
raft_node_set_voting(node, 1);
return node;
}
me->num_nodes++;
me->nodes = (raft_node_t*)realloc(me->nodes, sizeof(raft_node_t*) * me->num_nodes);
......
......@@ -61,6 +61,17 @@ void TestRaft_server_voting_results_in_voting(CuTest * tc)
CuAssertTrue(tc, 9 == raft_get_voted_for(r));
}
void TestRaft_server_add_node_makes_non_voting_node_voting(CuTest * tc)
{
void *r = raft_new();
void* n1 = raft_add_non_voting_node(r, NULL, 9, 0);
CuAssertTrue(tc, !raft_node_is_voting(n1));
raft_add_node(r, NULL, 9, 0);
CuAssertTrue(tc, raft_node_is_voting(n1));
CuAssertIntEquals(tc, 1, raft_get_num_nodes(r));
}
void TestRaft_server_remove_node(CuTest * tc)
{
void *r = raft_new();
......
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