Commit 2d93191b authored by Willem Thiart's avatar Willem Thiart
Browse files

Removed current_index field from server

parent 475f897b
...@@ -43,4 +43,6 @@ void log_mark_node_has_committed(log_t* me_, int idx); ...@@ -43,4 +43,6 @@ void log_mark_node_has_committed(log_t* me_, int idx);
void log_delete(log_t* me_, int idx); void log_delete(log_t* me_, int idx);
int log_get_current_idx(log_t* me_);
#endif /* RAFT_LOG_H_ */ #endif /* RAFT_LOG_H_ */
...@@ -44,9 +44,6 @@ typedef struct { ...@@ -44,9 +44,6 @@ typedef struct {
/* follower/leader/candidate indicator */ /* follower/leader/candidate indicator */
int state; int state;
/* most recently append idx, also indicates size of log */
int current_idx;
/* amount of time left till timeout */ /* amount of time left till timeout */
int timeout_elapsed; int timeout_elapsed;
...@@ -83,8 +80,6 @@ void raft_vote(raft_server_t* me, int node); ...@@ -83,8 +80,6 @@ void raft_vote(raft_server_t* me, int node);
void raft_set_current_term(raft_server_t* me,int term); void raft_set_current_term(raft_server_t* me,int term);
void raft_set_current_idx(raft_server_t* me,int idx);
/** /**
* @return 0 on error */ * @return 0 on error */
int raft_send_requestvote(raft_server_t* me, int node); int raft_send_requestvote(raft_server_t* me, int node);
......
...@@ -198,3 +198,9 @@ void log_mark_node_has_committed(log_t* me_, int idx) ...@@ -198,3 +198,9 @@ void log_mark_node_has_committed(log_t* me_, int idx)
if (e) if (e)
e->num_nodes += 1; e->num_nodes += 1;
} }
int log_get_current_idx(log_t* me_)
{
log_private_t* me = (log_private_t*)me_;
return log_count(me_) + me->base_log_idx;
}
...@@ -44,7 +44,6 @@ raft_server_t* raft_new() ...@@ -44,7 +44,6 @@ raft_server_t* raft_new()
return NULL; return NULL;
me->current_term = 0; me->current_term = 0;
me->voted_for = -1; me->voted_for = -1;
me->current_idx = 0;
me->timeout_elapsed = 0; me->timeout_elapsed = 0;
me->request_timeout = 200; me->request_timeout = 200;
me->election_timeout = 1000; me->election_timeout = 1000;
...@@ -289,10 +288,7 @@ int raft_recv_appendentries( ...@@ -289,10 +288,7 @@ int raft_recv_appendentries(
follow it (§5.3) */ follow it (§5.3) */
raft_entry_t* e2 = raft_get_entry_from_idx(me_, ae->prev_log_idx + 1); raft_entry_t* e2 = raft_get_entry_from_idx(me_, ae->prev_log_idx + 1);
if (e2) if (e2)
{
log_delete(me->log, ae->prev_log_idx + 1); log_delete(me->log, ae->prev_log_idx + 1);
raft_set_current_idx(me_, ae->prev_log_idx);
}
/* 4. If leaderCommit > commitIndex, set commitIndex = /* 4. If leaderCommit > commitIndex, set commitIndex =
min(leaderCommit, last log index) */ min(leaderCommit, last log index) */
...@@ -350,7 +346,7 @@ static int __should_grant_vote(raft_server_private_t* me, msg_requestvote_t* vr) ...@@ -350,7 +346,7 @@ static int __should_grant_vote(raft_server_private_t* me, msg_requestvote_t* vr)
return 0; return 0;
/* we have a more up-to-date log */ /* we have a more up-to-date log */
if (vr->last_log_idx < me->current_idx) if (vr->last_log_idx < raft_get_current_idx((void*)me))
return 0; return 0;
return 1; return 1;
...@@ -446,7 +442,7 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* e, ...@@ -446,7 +442,7 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* e,
raft_send_appendentries(me_, i); raft_send_appendentries(me_, i);
r->id = e->id; r->id = e->id;
r->idx = me->current_idx; r->idx = raft_get_current_idx(me_);
r->term = me->current_term; r->term = me->current_term;
return 0; return 0;
} }
...@@ -470,13 +466,7 @@ int raft_send_requestvote(raft_server_t* me_, int node) ...@@ -470,13 +466,7 @@ int raft_send_requestvote(raft_server_t* me_, int node)
int raft_append_entry(raft_server_t* me_, raft_entry_t* c) int raft_append_entry(raft_server_t* me_, raft_entry_t* c)
{ {
raft_server_private_t* me = (raft_server_private_t*)me_; raft_server_private_t* me = (raft_server_private_t*)me_;
return log_append_entry(me->log, c);
if (0 == log_append_entry(me->log, c))
{
me->current_idx += 1;
return 0;
}
return -1;
} }
int raft_apply_entry(raft_server_t* me_) int raft_apply_entry(raft_server_t* me_)
......
...@@ -81,15 +81,10 @@ int raft_get_current_term(raft_server_t* me_) ...@@ -81,15 +81,10 @@ int raft_get_current_term(raft_server_t* me_)
return ((raft_server_private_t*)me_)->current_term; return ((raft_server_private_t*)me_)->current_term;
} }
void raft_set_current_idx(raft_server_t* me_, int idx)
{
raft_server_private_t* me = (raft_server_private_t*)me_;
me->current_idx = idx;
}
int raft_get_current_idx(raft_server_t* me_) int raft_get_current_idx(raft_server_t* me_)
{ {
return ((raft_server_private_t*)me_)->current_idx; raft_server_private_t* me = (raft_server_private_t*)me_;
return log_get_current_idx(me->log);
} }
int raft_get_my_id(raft_server_t* me_) int raft_get_my_id(raft_server_t* me_)
......
...@@ -864,7 +864,14 @@ void TestRaft_follower_dont_grant_vote_if_candidate_has_a_less_complete_log( ...@@ -864,7 +864,14 @@ void TestRaft_follower_dont_grant_vote_if_candidate_has_a_less_complete_log(
/* server's term and idx are more up-to-date */ /* server's term and idx are more up-to-date */
raft_set_current_term(r, 1); raft_set_current_term(r, 1);
raft_set_current_idx(r, 2); raft_entry_t ety;
ety.term = 1;
ety.id = 100;
ety.data.len = 4;
ety.data.buf = (unsigned char*)"aaa";
raft_append_entry(r, &ety);
ety.id = 101;
raft_append_entry(r, &ety);
/* vote not granted */ /* vote not granted */
raft_recv_requestvote(r, 1, &rv, &rvr); raft_recv_requestvote(r, 1, &rv, &rvr);
...@@ -947,7 +954,6 @@ void TestRaft_follower_becoming_candidate_requests_votes_from_other_servers( ...@@ -947,7 +954,6 @@ void TestRaft_follower_becoming_candidate_requests_votes_from_other_servers(
/* set term so we can check it gets included in the outbound message */ /* set term so we can check it gets included in the outbound message */
raft_set_current_term(r, 2); raft_set_current_term(r, 2);
raft_set_current_idx(r, 5);
/* becoming candidate triggers vote requests */ /* becoming candidate triggers vote requests */
raft_become_candidate(r); raft_become_candidate(r);
...@@ -1059,7 +1065,17 @@ void TestRaft_candidate_requestvote_includes_logidx(CuTest * tc) ...@@ -1059,7 +1065,17 @@ void TestRaft_candidate_requestvote_includes_logidx(CuTest * tc)
raft_set_callbacks(r, &funcs, sender); raft_set_callbacks(r, &funcs, sender);
raft_set_current_term(r, 5); raft_set_current_term(r, 5);
raft_set_current_idx(r, 3); /* 3 entries */
raft_entry_t ety;
ety.term = 1;
ety.id = 100;
ety.data.len = 4;
ety.data.buf = (unsigned char*)"aaa";
raft_append_entry(r, &ety);
ety.id = 101;
raft_append_entry(r, &ety);
ety.id = 102;
raft_append_entry(r, &ety);
raft_send_requestvote(r, 1); raft_send_requestvote(r, 1);
msg_requestvote_t* rv = sender_poll_msg_data(sender); msg_requestvote_t* rv = sender_poll_msg_data(sender);
...@@ -1108,7 +1124,6 @@ TestRaft_candidate_recv_appendentries_frm_invalid_leader_doesnt_result_in_follow ...@@ -1108,7 +1124,6 @@ TestRaft_candidate_recv_appendentries_frm_invalid_leader_doesnt_result_in_follow
/* server's log is newer */ /* server's log is newer */
raft_set_current_term(r, 1); raft_set_current_term(r, 1);
raft_set_current_idx(r, 2);
/* is a candidate */ /* is a candidate */
raft_set_state(r, RAFT_STATE_CANDIDATE); raft_set_state(r, RAFT_STATE_CANDIDATE);
...@@ -1687,22 +1702,15 @@ void TestRaft_leader_recv_appendentries_response_increment_idx_of_peer( ...@@ -1687,22 +1702,15 @@ void TestRaft_leader_recv_appendentries_response_increment_idx_of_peer(
void TestRaft_leader_recv_appendentries_steps_down_if_newer( void TestRaft_leader_recv_appendentries_steps_down_if_newer(
CuTest * tc) CuTest * tc)
{ {
raft_cbs_t funcs = {
.log = NULL
};
msg_appendentries_t ae; msg_appendentries_t ae;
msg_appendentries_response_t aer; msg_appendentries_response_t aer;
void *sender = sender_new(NULL);
void *r = raft_new(); void *r = raft_new();
raft_add_peer(r, (void*)1, 1); raft_add_peer(r, (void*)1, 1);
raft_add_peer(r, (void*)2, 0); raft_add_peer(r, (void*)2, 0);
raft_set_state(r, RAFT_STATE_LEADER); raft_set_state(r, RAFT_STATE_LEADER);
raft_set_current_term(r, 5); raft_set_current_term(r, 5);
raft_set_current_idx(r, 5);
raft_set_callbacks(r, &funcs, sender);
/* check that node 0 considers itself the leader */ /* check that node 0 considers itself the leader */
CuAssertTrue(tc, 1 == raft_is_leader(r)); CuAssertTrue(tc, 1 == raft_is_leader(r));
CuAssertTrue(tc, 0 == raft_get_current_leader(r)); CuAssertTrue(tc, 0 == raft_get_current_leader(r));
...@@ -1731,7 +1739,6 @@ void TestRaft_leader_recv_appendentries_steps_down_if_newer_term( ...@@ -1731,7 +1739,6 @@ void TestRaft_leader_recv_appendentries_steps_down_if_newer_term(
raft_set_state(r, RAFT_STATE_LEADER); raft_set_state(r, RAFT_STATE_LEADER);
raft_set_current_term(r, 5); raft_set_current_term(r, 5);
raft_set_current_idx(r, 5);
memset(&ae, 0, sizeof(msg_appendentries_t)); memset(&ae, 0, sizeof(msg_appendentries_t));
ae.term = 6; ae.term = 6;
......
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