Commit 5752034b authored by Willem Thiart's avatar Willem Thiart
Browse files

Improved documentation

parent 8aeb24cf
This diff is collapsed.
...@@ -172,6 +172,8 @@ int raft_recv_appendentries_response(raft_server_t* me_, ...@@ -172,6 +172,8 @@ int raft_recv_appendentries_response(raft_server_t* me_,
__log(me_, "received appendentries response node: %d %s cidx: %d 1stidx: %d", __log(me_, "received appendentries response node: %d %s cidx: %d 1stidx: %d",
node, r->success == 1 ? "success" : "fail", r->current_idx, r->first_idx); node, r->success == 1 ? "success" : "fail", r->current_idx, r->first_idx);
// TODO: should force invalid leaders to stepdown
raft_node_t* p = raft_get_node(me_, node); raft_node_t* p = raft_get_node(me_, node);
if (0 == r->success) if (0 == r->success)
...@@ -318,10 +320,10 @@ int raft_recv_appendentries( ...@@ -318,10 +320,10 @@ int raft_recv_appendentries(
/* TODO: replace malloc with mempoll/arena */ /* TODO: replace malloc with mempoll/arena */
raft_entry_t* c = (raft_entry_t*)malloc(sizeof(raft_entry_t)); raft_entry_t* c = (raft_entry_t*)malloc(sizeof(raft_entry_t));
c->term = cmd->term; c->term = cmd->term;
c->len = cmd->data.len; memcpy(&c->data, &cmd->data, sizeof(raft_entry_data_t));
c->data.buf = (unsigned char*)malloc(cmd->data.len);
memcpy(c->data.buf, cmd->data.buf, cmd->data.len);
c->id = cmd->id; c->id = cmd->id;
c->data = (unsigned char*)malloc(cmd->data.len);
memcpy(c->data, cmd->data.buf, cmd->data.len);
int e = raft_append_entry(me_, c); int e = raft_append_entry(me_, c);
if (-1 == e) if (-1 == e)
{ {
...@@ -433,9 +435,9 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* e, ...@@ -433,9 +435,9 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* e,
ety.term = me->current_term; ety.term = me->current_term;
ety.id = e->id; ety.id = e->id;
ety.len = e->data.len; ety.data.len = e->data.len;
ety.data = malloc(e->data.len); ety.data.buf = malloc(e->data.len);
memcpy(ety.data, e->data.buf, e->data.len); memcpy(ety.data.buf, e->data.buf, e->data.len);
int res = raft_append_entry(me_, &ety); int res = raft_append_entry(me_, &ety);
for (i = 0; i < me->num_nodes; i++) for (i = 0; i < me->num_nodes; i++)
if (me->nodeid != i) if (me->nodeid != i)
...@@ -482,13 +484,13 @@ int raft_apply_entry(raft_server_t* me_) ...@@ -482,13 +484,13 @@ int raft_apply_entry(raft_server_t* me_)
if (!e) if (!e)
return -1; return -1;
__log(me_, "applying log: %d, size: %d", me->last_applied_idx, e->len); __log(me_, "applying log: %d, size: %d", me->last_applied_idx, e->data.len);
me->last_applied_idx++; me->last_applied_idx++;
if (me->commit_idx < me->last_applied_idx) if (me->commit_idx < me->last_applied_idx)
me->commit_idx = me->last_applied_idx; me->commit_idx = me->last_applied_idx;
if (me->cb.applylog) if (me->cb.applylog)
me->cb.applylog(me_, me->udata, e->data, e->len); me->cb.applylog(me_, me->udata, e->data.buf, e->data.len);
return 0; return 0;
} }
...@@ -503,7 +505,6 @@ void raft_send_appendentries(raft_server_t* me_, int node) ...@@ -503,7 +505,6 @@ void raft_send_appendentries(raft_server_t* me_, int node)
msg_appendentries_t ae; msg_appendentries_t ae;
ae.term = me->current_term; ae.term = me->current_term;
ae.leader_id = me->nodeid;
ae.leader_commit = raft_get_commit_idx(me_); ae.leader_commit = raft_get_commit_idx(me_);
ae.prev_log_idx = 0; ae.prev_log_idx = 0;
ae.prev_log_term = 0; ae.prev_log_term = 0;
...@@ -519,8 +520,8 @@ void raft_send_appendentries(raft_server_t* me_, int node) ...@@ -519,8 +520,8 @@ void raft_send_appendentries(raft_server_t* me_, int node)
{ {
mety.term = ety->term; mety.term = ety->term;
mety.id = ety->id; mety.id = ety->id;
mety.data.len = ety->len; mety.data.len = ety->data.len;
mety.data.buf = ety->data; mety.data.buf = ety->data.buf;
ae.entries = &mety; ae.entries = &mety;
// TODO: we want to send more than 1 at a time // TODO: we want to send more than 1 at a time
ae.n_entries = 1; ae.n_entries = 1;
......
...@@ -27,8 +27,8 @@ void TestRaft_server_idx_starts_at_1(CuTest * tc) ...@@ -27,8 +27,8 @@ void TestRaft_server_idx_starts_at_1(CuTest * tc)
CuAssertTrue(tc, 0 == raft_get_current_idx(r)); CuAssertTrue(tc, 0 == raft_get_current_idx(r));
raft_entry_t ety; raft_entry_t ety;
ety.data = "aaa"; ety.data.buf = "aaa";
ety.len = 3; ety.data.len = 3;
ety.id = 1; ety.id = 1;
ety.term = 1; ety.term = 1;
raft_append_entry(r, &ety); raft_append_entry(r, &ety);
...@@ -95,8 +95,8 @@ void TestRaft_server_entry_append_cant_append_if_id_is_zero(CuTest* tc) ...@@ -95,8 +95,8 @@ void TestRaft_server_entry_append_cant_append_if_id_is_zero(CuTest* tc)
raft_entry_t ety; raft_entry_t ety;
char *str = "aaa"; char *str = "aaa";
ety.data = str; ety.data.buf = str;
ety.len = 3; ety.data.len = 3;
ety.id = 0; ety.id = 0;
ety.term = 1; ety.term = 1;
...@@ -111,8 +111,8 @@ void TestRaft_server_entry_append_increases_logidx(CuTest* tc) ...@@ -111,8 +111,8 @@ void TestRaft_server_entry_append_increases_logidx(CuTest* tc)
raft_entry_t ety; raft_entry_t ety;
char *str = "aaa"; char *str = "aaa";
ety.data = str; ety.data.buf = str;
ety.len = 3; ety.data.len = 3;
ety.id = 1; ety.id = 1;
ety.term = 1; ety.term = 1;
...@@ -127,8 +127,8 @@ void TestRaft_server_append_entry_means_entry_gets_current_term(CuTest* tc) ...@@ -127,8 +127,8 @@ void TestRaft_server_append_entry_means_entry_gets_current_term(CuTest* tc)
raft_entry_t ety; raft_entry_t ety;
char *str = "aaa"; char *str = "aaa";
ety.data = str; ety.data.buf = str;
ety.len = 3; ety.data.len = 3;
ety.id = 1; ety.id = 1;
ety.term = 1; ety.term = 1;
...@@ -148,8 +148,8 @@ T_estRaft_server_append_entry_not_sucessful_if_entry_with_id_already_appended( ...@@ -148,8 +148,8 @@ T_estRaft_server_append_entry_not_sucessful_if_entry_with_id_already_appended(
raft_entry_t ety; raft_entry_t ety;
char *str = "aaa"; char *str = "aaa";
ety.data = str; ety.data.buf = str;
ety.len = 3; ety.data.len = 3;
ety.id = 1; ety.id = 1;
ety.term = 1; ety.term = 1;
...@@ -178,19 +178,19 @@ void TestRaft_server_entry_is_retrieveable_using_idx(CuTest* tc) ...@@ -178,19 +178,19 @@ void TestRaft_server_entry_is_retrieveable_using_idx(CuTest* tc)
e1.term = 1; e1.term = 1;
e1.id = 1; e1.id = 1;
e1.data = str; e1.data.buf = str;
e1.len = 3; e1.data.len = 3;
raft_append_entry(r, &e1); raft_append_entry(r, &e1);
/* different ID so we can be successful */ /* different ID so we can be successful */
e2.term = 1; e2.term = 1;
e2.id = 2; e2.id = 2;
e2.data = str2; e2.data.buf = str2;
e2.len = 3; e2.data.len = 3;
raft_append_entry(r, &e2); raft_append_entry(r, &e2);
CuAssertTrue(tc, NULL != (ety_appended = raft_get_entry_from_idx(r, 2))); CuAssertTrue(tc, NULL != (ety_appended = raft_get_entry_from_idx(r, 2)));
CuAssertTrue(tc, !strncmp(ety_appended->data, str2, 3)); CuAssertTrue(tc, !strncmp(ety_appended->data.buf, str2, 3));
} }
void TestRaft_server_wont_apply_entry_if_we_dont_have_entry_to_apply(CuTest* tc) void TestRaft_server_wont_apply_entry_if_we_dont_have_entry_to_apply(CuTest* tc)
...@@ -208,8 +208,8 @@ void TestRaft_server_wont_apply_entry_if_we_dont_have_entry_to_apply(CuTest* tc) ...@@ -208,8 +208,8 @@ void TestRaft_server_wont_apply_entry_if_we_dont_have_entry_to_apply(CuTest* tc)
ety.term = 1; ety.term = 1;
ety.id = 1; ety.id = 1;
ety.data = str; ety.data.buf = str;
ety.len = 3; ety.data.len = 3;
raft_append_entry(r, &ety); raft_append_entry(r, &ety);
raft_apply_entry(r); raft_apply_entry(r);
CuAssertTrue(tc, 1 == raft_get_last_applied_idx(r)); CuAssertTrue(tc, 1 == raft_get_last_applied_idx(r));
...@@ -234,8 +234,8 @@ void TestRaft_server_increment_lastApplied_when_lastApplied_lt_commitidx( ...@@ -234,8 +234,8 @@ void TestRaft_server_increment_lastApplied_when_lastApplied_lt_commitidx(
/* need at least one entry */ /* need at least one entry */
ety.term = 1; ety.term = 1;
ety.id = 1; ety.id = 1;
ety.data = "aaa"; ety.data.buf = "aaa";
ety.len = 3; ety.data.len = 3;
raft_append_entry(r, &ety); raft_append_entry(r, &ety);
/* let time lapse */ /* let time lapse */
...@@ -256,8 +256,8 @@ void TestRaft_server_apply_entry_increments_last_applied_idx(CuTest* tc) ...@@ -256,8 +256,8 @@ void TestRaft_server_apply_entry_increments_last_applied_idx(CuTest* tc)
raft_set_last_applied_idx(r, 0); raft_set_last_applied_idx(r, 0);
ety.id = 1; ety.id = 1;
ety.data = str; ety.data.buf = str;
ety.len = 3; ety.data.len = 3;
raft_append_entry(r, &ety); raft_append_entry(r, &ety);
raft_apply_entry(r); raft_apply_entry(r);
CuAssertTrue(tc, 1 == raft_get_last_applied_idx(r)); CuAssertTrue(tc, 1 == raft_get_last_applied_idx(r));
...@@ -668,8 +668,8 @@ TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries ...@@ -668,8 +668,8 @@ TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries
/* increase log size */ /* increase log size */
char *str1 = "111"; char *str1 = "111";
ety.data = str1; ety.data.buf = str1;
ety.len = 3; ety.data.len = 3;
ety.id = 1; ety.id = 1;
ety.term = 1; ety.term = 1;
raft_append_entry(r, &ety); raft_append_entry(r, &ety);
...@@ -677,14 +677,14 @@ TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries ...@@ -677,14 +677,14 @@ TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries
/* this log will be overwritten by the appendentries below */ /* this log will be overwritten by the appendentries below */
char *str2 = "222"; char *str2 = "222";
ety.data = str2; ety.data.buf = str2;
ety.len = 3; ety.data.len = 3;
ety.id = 2; ety.id = 2;
ety.term = 1; ety.term = 1;
raft_append_entry(r, &ety); raft_append_entry(r, &ety);
CuAssertTrue(tc, 2 == raft_get_log_count(r)); CuAssertTrue(tc, 2 == raft_get_log_count(r));
CuAssertTrue(tc, NULL != (ety_appended = raft_get_entry_from_idx(r, 2))); CuAssertTrue(tc, NULL != (ety_appended = raft_get_entry_from_idx(r, 2)));
CuAssertTrue(tc, !strncmp(ety_appended->data, str2, 3)); CuAssertTrue(tc, !strncmp(ety_appended->data.buf, str2, 3));
/* pass a appendentry that is newer */ /* pass a appendentry that is newer */
msg_entry_t mety; msg_entry_t mety;
...@@ -706,7 +706,7 @@ TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries ...@@ -706,7 +706,7 @@ TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_entries
CuAssertTrue(tc, 1 == aer.success); CuAssertTrue(tc, 1 == aer.success);
CuAssertTrue(tc, 2 == raft_get_log_count(r)); CuAssertTrue(tc, 2 == raft_get_log_count(r));
CuAssertTrue(tc, NULL != (ety_appended = raft_get_entry_from_idx(r, 1))); CuAssertTrue(tc, NULL != (ety_appended = raft_get_entry_from_idx(r, 1)));
CuAssertTrue(tc, !strncmp(ety_appended->data, str1, 3)); CuAssertTrue(tc, !strncmp(ety_appended->data.buf, str1, 3));
} }
void TestRaft_follower_recv_appendentries_add_new_entries_not_already_in_log( void TestRaft_follower_recv_appendentries_add_new_entries_not_already_in_log(
...@@ -1330,8 +1330,8 @@ void TestRaft_leader_sends_appendentries_with_prevLogIdx( ...@@ -1330,8 +1330,8 @@ void TestRaft_leader_sends_appendentries_with_prevLogIdx(
raft_entry_t ety; raft_entry_t ety;
ety.term = 2; ety.term = 2;
ety.id = 100; ety.id = 100;
ety.len = 4; ety.data.len = 4;
ety.data = (unsigned char*)"aaa"; ety.data.buf = (unsigned char*)"aaa";
raft_append_entry(r, &ety); raft_append_entry(r, &ety);
raft_node_set_next_idx(n, 1); raft_node_set_next_idx(n, 1);
raft_send_appendentries(r, 1); raft_send_appendentries(r, 1);
...@@ -1379,8 +1379,8 @@ void TestRaft_leader_sends_appendentries_when_peer_has_next_idx_of_0( ...@@ -1379,8 +1379,8 @@ void TestRaft_leader_sends_appendentries_when_peer_has_next_idx_of_0(
raft_entry_t ety; raft_entry_t ety;
ety.term = 1; ety.term = 1;
ety.id = 100; ety.id = 100;
ety.len = 4; ety.data.len = 4;
ety.data = (unsigned char*)"aaa"; ety.data.buf = (unsigned char*)"aaa";
raft_append_entry(r, &ety); raft_append_entry(r, &ety);
raft_send_appendentries(r, 0); raft_send_appendentries(r, 0);
ae = sender_poll_msg_data(sender); ae = sender_poll_msg_data(sender);
...@@ -1452,7 +1452,7 @@ void T_estRaft_leader_doesnt_append_entry_if_unique_id_is_duplicate(CuTest * tc) ...@@ -1452,7 +1452,7 @@ void T_estRaft_leader_doesnt_append_entry_if_unique_id_is_duplicate(CuTest * tc)
msg_entry_t ety; msg_entry_t ety;
ety.id = 1; ety.id = 1;
ety.data = "entry"; ety.data = "entry";
ety.len = strlen("entry"); ety.data.len = strlen("entry");
r = raft_new(); r = raft_new();
raft_set_configuration(r, cfg, 0); raft_set_configuration(r, cfg, 0);
...@@ -1495,8 +1495,8 @@ TestRaft_leader_recv_appendentries_response_increase_commit_idx_when_majority_ha ...@@ -1495,8 +1495,8 @@ TestRaft_leader_recv_appendentries_response_increase_commit_idx_when_majority_ha
raft_entry_t ety; raft_entry_t ety;
ety.term = 1; ety.term = 1;
ety.id = 1; ety.id = 1;
ety.data = "aaaa"; ety.data.buf = "aaaa";
ety.len = 4; ety.data.len = 4;
raft_append_entry(r, &ety); raft_append_entry(r, &ety);
ety.id = 2; ety.id = 2;
raft_append_entry(r, &ety); raft_append_entry(r, &ety);
...@@ -1561,8 +1561,8 @@ void TestRaft_leader_recv_appendentries_response_failure_does_not_set_node_nexti ...@@ -1561,8 +1561,8 @@ void TestRaft_leader_recv_appendentries_response_failure_does_not_set_node_nexti
raft_entry_t ety; raft_entry_t ety;
ety.term = 1; ety.term = 1;
ety.id = 1; ety.id = 1;
ety.data = "aaaa"; ety.data.buf = "aaaa";
ety.len = 4; ety.data.len = 4;
raft_append_entry(r, &ety); raft_append_entry(r, &ety);
/* send appendentries - /* send appendentries -
......
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