Unverified Commit 391120db authored by Ozan Tezcan's avatar Ozan Tezcan Committed by GitHub
Browse files

Refactor (#99)

Refactor
parent fc503058
......@@ -195,7 +195,7 @@ int raft_node_is_voting_committed(raft_node_t* me)
raft_node_id_t raft_node_get_id(raft_node_t* me)
{
return me != NULL ? me->id : -1;
return me != NULL ? me->id : RAFT_NODE_ID_NONE;
}
void raft_node_set_addition_committed(raft_node_t* me, int committed)
......
......@@ -106,16 +106,16 @@ raft_server_t* raft_new_with_log(const raft_log_impl_t *log_impl, void *log_arg)
return NULL;
me->current_term = 0;
me->voted_for = -1;
me->voted_for = RAFT_NODE_ID_NONE;
me->timeout_elapsed = 0;
me->request_timeout = 200;
me->election_timeout = 1000;
me->node_transferring_leader_to = RAFT_NODE_ID_NONE;
me->auto_flush = 1;
raft_update_quorum_meta((raft_server_t*)me, me->msg_id);
raft_update_quorum_meta(me, me->msg_id);
raft_randomize_election_timeout((raft_server_t*)me);
raft_randomize_election_timeout(me);
me->log_impl = log_impl;
me->log = me->log_impl->init(me, log_arg);
if (!me->log) {
......@@ -124,13 +124,13 @@ raft_server_t* raft_new_with_log(const raft_log_impl_t *log_impl, void *log_arg)
}
me->voting_cfg_change_log_idx = -1;
raft_set_state((raft_server_t*)me, RAFT_STATE_FOLLOWER);
raft_set_state(me, RAFT_STATE_FOLLOWER);
me->leader_id = RAFT_NODE_ID_NONE;
me->snapshot_in_progress = 0;
raft_set_snapshot_metadata((raft_server_t*)me, 0, 0);
raft_set_snapshot_metadata(me, 0, 0);
return (raft_server_t*)me;
return me;
}
raft_server_t* raft_new(void)
......@@ -140,7 +140,7 @@ raft_server_t* raft_new(void)
void raft_set_callbacks(raft_server_t* me, raft_cbs_t* funcs, void* udata)
{
memcpy(&me->cb, funcs, sizeof(raft_cbs_t));
me->cb = *funcs;
me->udata = udata;
}
......@@ -153,11 +153,11 @@ void raft_destroy(raft_server_t* me)
void raft_clear(raft_server_t* me)
{
me->current_term = 0;
me->voted_for = -1;
me->voted_for = RAFT_NODE_ID_NONE;
me->timeout_elapsed = 0;
raft_randomize_election_timeout(me);
me->voting_cfg_change_log_idx = -1;
raft_set_state((raft_server_t*)me, RAFT_STATE_FOLLOWER);
raft_set_state(me, RAFT_STATE_FOLLOWER);
me->leader_id = RAFT_NODE_ID_NONE;
me->commit_idx = 0;
me->last_applied_idx = 0;
......@@ -618,11 +618,8 @@ int raft_periodic(raft_server_t* me, int msec_since_last_period)
return e;
}
if (me->last_applied_idx < raft_get_commit_idx(me) &&
raft_is_apply_allowed(me))
{
int e = raft_apply_all(me);
if (0 != e)
if (e != 0) {
return e;
}
......@@ -957,10 +954,13 @@ int raft_recv_requestvote(raft_server_t* me,
goto done;
}
if (me->current_term == vr->term &&
(me->voted_for != -1 && me->voted_for != vr->candidate_id)) {
if (me->current_term == vr->term) {
/* If already voted for some other node for this term, return failure */
if (me->voted_for != RAFT_NODE_ID_NONE &&
me->voted_for != vr->candidate_id) {
goto done;
}
}
/* Below we check if log is more up-to-date... */
raft_index_t current_idx = raft_get_current_idx(me);
......@@ -1189,11 +1189,7 @@ int raft_apply_entry(raft_server_t* me)
}
}
/* voting cfg change is now complete.
* TODO: there seem to be a possible off-by-one bug hidden here, requiring
* checking log_idx >= voting_cfg_change_log_idx rather than plain ==.
*/
if (log_idx >= me->voting_cfg_change_log_idx)
if (log_idx == me->voting_cfg_change_log_idx)
me->voting_cfg_change_log_idx = -1;
if (!raft_entry_is_cfg_change(ety))
......@@ -1550,7 +1546,7 @@ int raft_get_nvotes_for_me(raft_server_t* me)
int raft_vote(raft_server_t* me, raft_node_t* node)
{
return raft_vote_for_nodeid(me, node ? raft_node_get_id(node) : -1);
return raft_vote_for_nodeid(me, raft_node_get_id(node));
}
int raft_vote_for_nodeid(raft_server_t* me, const raft_node_id_t nodeid)
......@@ -1584,7 +1580,7 @@ int raft_apply_all(raft_server_t* me)
if (!raft_is_apply_allowed(me))
return 0;
while (raft_get_last_applied_idx(me) < raft_get_commit_idx(me))
while (me->commit_idx > me->last_applied_idx)
{
int e = raft_apply_entry(me);
if (0 != e)
......@@ -1754,7 +1750,7 @@ int raft_begin_load_snapshot(
me->current_term = last_included_term;
}
raft_set_state((raft_server_t*)me, RAFT_STATE_FOLLOWER);
raft_set_state(me, RAFT_STATE_FOLLOWER);
me->leader_id = RAFT_NODE_ID_NONE;
me->log_impl->reset(me->log, last_included_index + 1, last_included_term);
......@@ -2132,12 +2128,10 @@ int raft_flush(raft_server_t* me, raft_index_t sync_index)
raft_send_appendentries(me, me->nodes[i]);
}
if (me->last_applied_idx < raft_get_commit_idx(me)) {
e = raft_apply_all(me);
if (e != 0) {
return e;
}
}
out:
raft_process_read_queue(me);
......
......@@ -33,8 +33,6 @@ void raft_set_log_enabled(raft_server_t* me, int enable)
raft_node_id_t raft_get_nodeid(raft_server_t* me)
{
if (!me->node)
return -1;
return raft_node_get_id(me->node);
}
......@@ -81,15 +79,14 @@ int raft_set_current_term(raft_server_t* me, const raft_term_t term)
{
if (me->current_term < term)
{
int voted_for = -1;
if (me->cb.persist_term)
{
int e = me->cb.persist_term(me, me->udata, term, voted_for);
int e = me->cb.persist_term(me, me->udata, term, RAFT_NODE_ID_NONE);
if (0 != e)
return e;
}
me->current_term = term;
me->voted_for = voted_for;
me->voted_for = RAFT_NODE_ID_NONE;
}
return 0;
}
......
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