void raft_set_configuration(raft_server_t* me_, raft_node_configuration_t* nodes, int my_idx) { raft_server_private_t* me = (raft_server_private_t*)me_; int num_nodes; /* TODO: one memory allocation only please */ for (num_nodes = 0; nodes->udata_address; nodes++) { num_nodes++; me->nodes = (raft_node_t*)realloc(me->nodes, sizeof(raft_node_t*) * num_nodes); me->num_nodes = num_nodes; me->nodes[num_nodes - 1] = raft_node_new(nodes->udata_address); } me->votes_for_me = (int*)calloc(num_nodes, sizeof(int)); me->nodeid = my_idx; }
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_; /* 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); me->nodes[me->num_nodes - 1] = raft_node_new(udata, id); assert(me->nodes[me->num_nodes - 1]); if (is_self) me->node = me->nodes[me->num_nodes - 1]; return me->nodes[me->num_nodes - 1]; }
void TestRaft_node_set_nextIdx(CuTest * tc) { raft_node_t *p = raft_node_new((void*)1, 1); raft_node_set_next_idx(p, 3); CuAssertTrue(tc, 3 == raft_node_get_next_idx(p)); }
void TestRaft_is_voting_by_default(CuTest * tc) { raft_node_t *p = raft_node_new((void*)1, 1); CuAssertTrue(tc, raft_node_is_voting(p)); }