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

Add node removal

parent 1c6cb689
......@@ -350,6 +350,10 @@ raft_node_t* raft_add_node(raft_server_t* me, void* user_data, int id, int is_se
* Parameters are identical to raft_add_node */
raft_node_t* raft_add_non_voting_node(raft_server_t* me_, void* udata, int id, int is_self);
/** Remove node.
* @param node The node to be removed. */
void raft_remove_node(raft_server_t* me_, raft_node_t* node);
/** Set election timeout.
* The amount of time that needs to elapse before we assume the leader is down
* @param[in] msec Election timeout in milliseconds */
......
......@@ -692,6 +692,30 @@ raft_node_t* raft_add_non_voting_node(raft_server_t* me_, void* udata, int id, i
return node;
}
void raft_remove_node(raft_server_t* me_, raft_node_t* node)
{
raft_server_private_t* me = (raft_server_private_t*)me_;
raft_node_t* new_array, *new_node;
new_array = (raft_node_t*)calloc((me->num_nodes - 1), sizeof(raft_node_t*));
new_node = new_array;
for (int i = 0; i<me->num_nodes; i++)
{
if (me->nodes[i] == node)
continue;
*new_node = me->nodes[i];
new_node++;
}
me->num_nodes--;
free(me->nodes);
me->nodes = new_array;
free(node);
}
int raft_get_nvotes_for_me(raft_server_t* me_)
{
raft_server_private_t* me = (raft_server_private_t*)me_;
......
......@@ -61,6 +61,19 @@ void TestRaft_server_voting_results_in_voting(CuTest * tc)
CuAssertTrue(tc, 9 == raft_get_voted_for(r));
}
void TestRaft_server_remove_node(CuTest * tc)
{
void *r = raft_new();
void* n1 = raft_add_node(r, NULL, 1, 0);
void* n2 = raft_add_node(r, NULL, 9, 0);
raft_remove_node(r, n1);
CuAssertTrue(tc, NULL == raft_get_node(r, 1));
CuAssertTrue(tc, NULL != raft_get_node(r, 9));
raft_remove_node(r, n2);
CuAssertTrue(tc, NULL == raft_get_node(r, 9));
}
void TestRaft_election_start_increments_term(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