Commit 49176fc7 authored by willem's avatar willem
Browse files

Changed peer interface

parent 0feb3d14
......@@ -20,7 +20,7 @@ typedef struct {
void* inbox;
} sender_t;
int sender_send(void* caller, void* udata, int peer, const unsigned char* data, int len)
int sender_send(void* caller, void* udata, void* peer, const unsigned char* data, int len)
{
sender_t* me = udata;
void* n;
......
int sender_send(void* caller, void* udata, const int peer,
int sender_send(void* caller, void* udata, void* peer,
const unsigned char* data, const int len);
void* sender_new();
......
......@@ -65,7 +65,7 @@ typedef int (
) (
void *caller,
void *udata,
const int peer,
void* peer,
const unsigned char *send_data,
const int len
);
......@@ -146,23 +146,23 @@ int raft_receive_append_entries(raft_server_t* me, msg_appendentries_t* ae);
int raft_periodic(void* me_);
int raft_recv_appendentries(void* me_, int peer, msg_appendentries_t* ae);
int raft_recv_appendentries(void* me_, void* peer, msg_appendentries_t* ae);
int raft_recv_requestvote(void* me_, int peer, msg_requestvote_t* vr);
int raft_recv_requestvote(void* me_, void* peer, msg_requestvote_t* vr);
void raft_execute_command(void* me_);
void raft_set_election_timeout(void* me_, int millisec);
int raft_vote(void* me_, int peer);
int raft_vote(void* me_, void* peer);
int raft_add_peer(void* me_, void* peer_udata);
void* raft_add_peer(void* me_, void* peer_udata);
int raft_remove_peer(void* me_, int peer);
int raft_remove_peer(void* me_, void* peer);
int raft_get_num_peers(void* me_);
int raft_recv_command(void* me_, int peer, msg_command_t* cmd);
int raft_recv_command(void* me_, void* peer, msg_command_t* cmd);
int raft_get_log_size(void* me_);
......@@ -182,4 +182,4 @@ int raft_is_leader(void* me_);
int raft_is_candidate(void* me_);
int raft_send_requestvote(void* me_, int peer);
int raft_send_requestvote(void* me_, void* peer);
......@@ -116,22 +116,22 @@ int raft_periodic(void* me_)
/**
* Invoked by leader to replicate log entries (§5.3); also used as heartbeat (§5.2). */
int raft_recv_appendentries(void* me_, int peer, msg_appendentries_t* ae)
int raft_recv_appendentries(void* me_, void* peer, msg_appendentries_t* ae)
{
return 0;
}
int raft_recv_appendentries_response(void* me_, int peer, msg_appendentries_response_t* ae)
int raft_recv_appendentries_response(void* me_, void* peer, msg_appendentries_response_t* ae)
{
return 0;
}
int raft_recv_requestvote(void* me_, int peer, msg_requestvote_t* vr)
int raft_recv_requestvote(void* me_, void* peer, msg_requestvote_t* vr)
{
return 0;
}
int raft_recv_requestvote_response(void* me_, int peer, msg_requestvote_response_t* r)
int raft_recv_requestvote_response(void* me_, void* peer, msg_requestvote_response_t* r)
{
return 0;
}
......@@ -144,7 +144,7 @@ void raft_set_election_timeout(void* me_, int millisec)
{
}
int raft_vote(void* me_, int peer)
int raft_vote(void* me_, void* peer)
{
return 0;
}
......@@ -156,12 +156,12 @@ void raft_set_configuration(raft_server_t* me)
}
#endif
int raft_add_peer(void* me_, void* peer_udata)
void* raft_add_peer(void* me_, void* peer_udata)
{
return 0;
return NULL;
}
int raft_remove_peer(void* me_, int peer)
int raft_remove_peer(void* me_, void* peer)
{
return 0;
}
......@@ -172,7 +172,7 @@ int raft_get_num_peers(void* me_)
return 0;
}
int raft_recv_command(void* me_, int peer, msg_command_t* cmd)
int raft_recv_command(void* me_, void* peer, msg_command_t* cmd)
{
return 0;
}
......@@ -220,7 +220,7 @@ int raft_is_candidate(void* me_)
return 0;
}
int raft_send_requestvote(void* me_, int peer)
int raft_send_requestvote(void* me_, void* peer)
{
return 0;
......
......@@ -143,7 +143,7 @@ void TestRaft_candidate_receives_majority_of_votes_becomes_leader(CuTest * tc)
/* Candidate 5.2 */
void TestRaft_candidate_will_not_respond_to_voterequest_if_it_has_already_voted(CuTest * tc)
{
void *r;
void *r, *peer;
void *sender;
void *msg;
raft_external_functions_t funcs = {
......@@ -161,7 +161,7 @@ void TestRaft_candidate_will_not_respond_to_voterequest_if_it_has_already_voted(
r = raft_new();
/* three nodes */
raft_add_peer(r,(void*)1);
peer = raft_add_peer(r,(void*)1);
raft_add_peer(r,(void*)2);
raft_set_external_functions(r,&funcs,sender);
raft_set_current_term(r,1);
......@@ -170,7 +170,7 @@ void TestRaft_candidate_will_not_respond_to_voterequest_if_it_has_already_voted(
CuAssertTrue(tc, 0 == raft_is_follower(r));
raft_periodic(r);
raft_recv_appendentries(r,1,&ae);
raft_recv_appendentries(r,peer,&ae);
CuAssertTrue(tc, 1 == raft_is_follower(r));
}
......@@ -211,7 +211,7 @@ void TestRaft_candidate_will_reject_requestvote_if_its_log_is_more_complete(CuTe
/* Candidate 5.2 */
void TestRaft_candidate_requestvote_includes_loginfo(CuTest * tc)
{
void *r;
void *r, *peer;
void *sender;
void *msg;
raft_external_functions_t funcs = {
......@@ -223,13 +223,14 @@ void TestRaft_candidate_requestvote_includes_loginfo(CuTest * tc)
r = raft_new();
/* three nodes */
raft_add_peer(r,(void*)1);
peer = raft_add_peer(r,(void*)1);
raft_add_peer(r,(void*)2);
raft_set_external_functions(r,&funcs,sender);
raft_set_current_term(r,5);
raft_set_current_index(r,3);
raft_set_state(r,RAFT_STATE_CANDIDATE);
raft_send_requestvote(r,1);
raft_send_requestvote(r,peer);
msg = sender_poll_msg(sender);
// CuAssertTrue(tc, msg_is_requestvote(msg));
......@@ -240,7 +241,7 @@ void TestRaft_candidate_requestvote_includes_loginfo(CuTest * tc)
/* Candidate 5.2 */
void TestRaft_candidate_recv_appendentries_frm_leader_results_in_follower(CuTest * tc)
{
void *r;
void *r, *peer;
void *sender;
void *msg;
raft_external_functions_t funcs = {
......@@ -254,16 +255,18 @@ void TestRaft_candidate_recv_appendentries_frm_leader_results_in_follower(CuTest
sender = sender_new();
r = raft_new();
/* three nodes */
raft_add_peer(r,(void*)1);
peer = raft_add_peer(r,(void*)1);
raft_add_peer(r,(void*)2);
raft_set_external_functions(r,&funcs,sender);
raft_set_current_term(r,1);
raft_set_state(r,RAFT_STATE_CANDIDATE);
CuAssertTrue(tc, 0 == raft_is_follower(r));
raft_periodic(r);
raft_recv_appendentries(r,1,&ae);
raft_recv_appendentries(r,peer,&ae);
CuAssertTrue(tc, 1 == raft_is_follower(r));
}
......
......@@ -11,41 +11,44 @@
void TestRaft_follower_increases_log_after_appendentry(CuTest * tc)
{
void *r;
void *r, *peer;
msg_appendentries_t ae;
memset(&ae,0,sizeof(msg_appendentries_t));
r = raft_new();
/* three nodes */
raft_add_peer(r,(void*)1);
peer = raft_add_peer(r,(void*)1);
raft_add_peer(r,(void*)2);
raft_set_current_term(r,1);
raft_set_state(r,RAFT_STATE_FOLLOWER);
CuAssertTrue(tc, 0 == raft_get_log_size(r));
raft_recv_appendentries(r,1,&ae);
raft_recv_appendentries(r,peer,&ae);
CuAssertTrue(tc, 1 == raft_get_log_size(r));
}
void TestRaft_follower_rejects_appendentries_if_idx_and_term_dont_match_preceding_ones(CuTest * tc)
{
void *r;
void *r, *peer;
msg_appendentries_t ae;
memset(&ae,0,sizeof(msg_appendentries_t));
r = raft_new();
/* three nodes */
raft_add_peer(r,(void*)1);
peer = raft_add_peer(r,(void*)1);
raft_add_peer(r,(void*)2);
raft_set_current_term(r,1);
raft_set_state(r,RAFT_STATE_FOLLOWER);
CuAssertTrue(tc, 0 == raft_get_log_size(r));
raft_recv_appendentries(r,1,&ae);
raft_recv_appendentries(r,peer,&ae);
CuAssertTrue(tc, 1 == raft_get_log_size(r));
}
......
......@@ -64,7 +64,7 @@ set commitIndex = N (
void TestRaft_leader_append_command_to_log_increases_idxno(CuTest * tc)
{
void *r;
void *r, *peer;
msg_command_t cmd;
cmd.id = 1;
......@@ -72,16 +72,17 @@ void TestRaft_leader_append_command_to_log_increases_idxno(CuTest * tc)
cmd.len = strlen("command");
r = raft_new();
peer = raft_add_peer(r,(void*)1);
raft_set_state(r,RAFT_STATE_LEADER);
CuAssertTrue(tc, 0 == raft_get_log_size(r));
raft_recv_command(r,1,&cmd);
raft_recv_command(r,peer,&cmd);
CuAssertTrue(tc, 1 == raft_get_log_size(r));
}
void TestRaft_leader_doesnt_append_command_if_unique_id_is_duplicate(CuTest * tc)
{
void *r;
void *r, *peer;
msg_command_t cmd;
cmd.id = 1;
......@@ -89,19 +90,47 @@ void TestRaft_leader_doesnt_append_command_if_unique_id_is_duplicate(CuTest * tc
cmd.len = strlen("command");
r = raft_new();
peer = raft_add_peer(r,(void*)1);
raft_set_state(r,RAFT_STATE_LEADER);
CuAssertTrue(tc, 0 == raft_get_log_size(r));
raft_recv_command(r,1,&cmd);
raft_recv_command(r,peer,&cmd);
CuAssertTrue(tc, 1 == raft_get_log_size(r));
raft_recv_command(r,1,&cmd);
raft_recv_command(r,peer,&cmd);
CuAssertTrue(tc, 1 == raft_get_log_size(r));
}
void TestRaft_leader_increase_commitno_when_majority_have_entry_and_atleast_one_newer_entry(CuTest * tc)
{
}
void TestRaft_leader_steps_down_if_received_appendentries_is_newer_than_itself(CuTest * tc)
{
void* peer;
void *r;
void *sender;
raft_external_functions_t funcs = {
.send = sender_send,
.log = NULL
};
msg_appendentries_t ae;
memset(&ae,0,sizeof(msg_appendentries_t));
ae.term = 5;
ae.prevLogIndex = 6;
ae.prevLogTerm = 5;
sender = sender_new();
r = raft_new();
peer = raft_add_peer(r,(void*)1);
raft_set_state(r,RAFT_STATE_LEADER);
raft_set_current_term(r,5);
raft_set_current_index(r,5);
raft_set_external_functions(r,&funcs,sender);
raft_recv_appendentries(r,peer,&ae);
CuAssertTrue(tc, 1 == raft_is_follower(r));
}
......@@ -50,7 +50,7 @@ void TestRaft_add_peer(CuTest * tc)
void TestRaft_remove_peer(CuTest * tc)
{
void *r;
int peer;
void *peer;
r = raft_new();
peer = raft_add_peer(r,(void*)1);
......
......@@ -12,7 +12,7 @@
/* 5.1 */
void TestRaft_server_recv_appendentries_reply_false_when_term_less_than_currentterm(CuTest * tc)
{
void *r;
void *r, *peer;
void *sender;
raft_external_functions_t funcs = {
.send = sender_send,
......@@ -26,11 +26,12 @@ void TestRaft_server_recv_appendentries_reply_false_when_term_less_than_currentt
sender = sender_new();
r = raft_new();
peer = raft_add_peer(r,(void*)1);
/* higher current term */
raft_set_current_term(r,5);
raft_set_external_functions(r,&funcs,sender);
raft_recv_appendentries(r,1,&ae);
raft_recv_appendentries(r,peer,&ae);
/* response is false */
aer = sender_poll_msg(sender);
......@@ -44,7 +45,7 @@ void TestRaft_server_recv_appendentries_reply_false_when_term_less_than_currentt
/* 5.3 */
void TestRaft_server_recv_appendentries_reply_false_if_log_does_not_contain_entry_at_prevLogIndex(CuTest * tc)
{
void *r;
void *r, *peer;
void *sender;
void *msg;
raft_external_functions_t funcs = {
......@@ -61,9 +62,10 @@ void TestRaft_server_recv_appendentries_reply_false_if_log_does_not_contain_entr
sender = sender_new();
r = raft_new();
peer = raft_add_peer(r,(void*)1);
raft_set_current_term(r,5);
raft_set_external_functions(r,&funcs,sender);
raft_recv_appendentries(r,1,&ae);
raft_recv_appendentries(r,peer,&ae);
aer = sender_poll_msg(sender);
CuAssertTrue(tc, NULL != aer);
CuAssertTrue(tc, 0 == aer->success);
......@@ -72,20 +74,22 @@ void TestRaft_server_recv_appendentries_reply_false_if_log_does_not_contain_entr
/* 5.3 */
void TestRaft_server_recv_appendentries_delete_entries_if_conflict_with_new_entries(CuTest * tc)
{
void *r;
void *r, *peer;
msg_appendentries_t ae;
memset(&ae,0,sizeof(msg_appendentries_t));
ae.term = 2;
r = raft_new();
peer = raft_add_peer(r,(void*)1);
raft_set_current_term(r,1);
raft_recv_appendentries(r,1,&ae);
raft_recv_appendentries(r,peer,&ae);
}
void TestRaft_server_recv_appendentries_add_new_entries_not_already_in_log(CuTest * tc)
{
void *r;
void *r, *peer;
void *sender;
raft_external_functions_t funcs = {
.send = sender_send,
......@@ -99,9 +103,11 @@ void TestRaft_server_recv_appendentries_add_new_entries_not_already_in_log(CuTes
sender = sender_new();
r = raft_new();
peer = raft_add_peer(r,(void*)1);
raft_set_current_term(r,1);
raft_set_external_functions(r,&funcs,sender);
raft_recv_appendentries(r,1,&ae);
raft_recv_appendentries(r,peer,&ae);
// msg = sender_poll_msg(sender);
// CuAssertTrue(tc, aer);
......@@ -113,7 +119,7 @@ void TestRaft_server_recv_appendentries_add_new_entries_not_already_in_log(CuTes
//min(leaderCommit, last log index)
void TestRaft_server_recv_appendentries_set_commitindex(CuTest * tc)
{
void *r;
void *r, *peer;
void *sender;
raft_external_functions_t funcs = {
.send = sender_send,
......@@ -127,9 +133,10 @@ void TestRaft_server_recv_appendentries_set_commitindex(CuTest * tc)
sender = sender_new();
r = raft_new();
peer = raft_add_peer(r,(void*)1);
raft_set_current_term(r,1);
raft_set_external_functions(r,&funcs,sender);
raft_recv_appendentries(r,1,&ae);
raft_recv_appendentries(r,peer,&ae);
// msg = sender_poll_msg(sender);
// CuAssertTrue(tc, aer);
......
......@@ -18,7 +18,7 @@ void TestRaft_server_recv_requestvote_reply_false_if_term_less_than_current_term
CuTest * tc
)
{
void *r;
void *r, *peer;
void *sender;
raft_external_functions_t funcs = {
.send = sender_send,
......@@ -33,9 +33,11 @@ void TestRaft_server_recv_requestvote_reply_false_if_term_less_than_current_term
sender = sender_new();
r = raft_new();
peer = raft_add_peer(r,(void*)1);
raft_set_current_term(r,1);
raft_set_external_functions(r,&funcs,sender);
raft_recv_requestvote(r,1,&rv);
raft_recv_requestvote(r,peer,&rv);
rvr = sender_poll_msg(sender);
CuAssertTrue(tc, NULL != rvr);
CuAssertTrue(tc, 0 == rvr->voteGranted);
......@@ -47,7 +49,7 @@ void TestRaft_server_dont_grant_vote_if_we_didnt_vote_for_this_candidate(
CuTest * tc
)
{
void *r;
void *r, *peer;
void *sender;
void *msg;
raft_external_functions_t funcs = {
......@@ -63,10 +65,12 @@ void TestRaft_server_dont_grant_vote_if_we_didnt_vote_for_this_candidate(
sender = sender_new();
r = raft_new();
peer = raft_add_peer(r,(void*)1);
raft_set_external_functions(r,&funcs,sender);
raft_set_current_term(r,1);
raft_vote(r,2);
raft_recv_requestvote(r,1,&rv);
raft_vote(r,peer);
raft_recv_requestvote(r,peer,&rv);
rvr = sender_poll_msg(sender);
CuAssertTrue(tc, NULL != rvr);
CuAssertTrue(tc, 0 == rvr->voteGranted);
......
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