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

Refactor debug logging (#127)

Refactor debug logging and change log callback

e.g:
19 --> 13, sent snapshot_resp id:27712, t:24, s:1, o:4096, lc:0
14 --> 17, sent requestvote_req pv:1, t:25, ci:14, lli:6848, llt:23
14 <-- 17, recv requestvote_resp pv:1, t:25, rt:24, vg:0

Breaking changes: 

raft_log_f() callback will not pass node_id_t anymore.
Sender and receiver will be part of the log line as you can see above.
parent c0270e61
......@@ -441,15 +441,12 @@ typedef int (
/** Callback for providing debug logging information.
* This callback is optional
* @param[in] raft The Raft server making this callback
* @param[in] node_id The node id that is the subject of this log. If log is not
* related to a node, this could be 'RAFT_NODE_ID_NONE'.
* @param[in] user_data User data that is passed from Raft server
* @param[in] buf The buffer that was logged */
typedef void (
*raft_log_f
) (
raft_server_t* raft,
raft_node_id_t node_id,
void *user_data,
const char *buf
);
......@@ -991,10 +988,10 @@ int raft_periodic(raft_server_t *me);
* @return
* 0 on success
* */
int raft_recv_appendentries(raft_server_t* me,
raft_node_t* node,
raft_appendentries_req_t* req,
raft_appendentries_resp_t* resp);
int raft_recv_appendentries(raft_server_t *me,
raft_node_t *node,
raft_appendentries_req_t *req,
raft_appendentries_resp_t *resp);
/** Receive a response from an appendentries message we sent.
* @param[in] node The node who sent us this message
......@@ -1003,9 +1000,9 @@ int raft_recv_appendentries(raft_server_t* me,
* 0 on success;
* -1 on error;
* RAFT_ERR_NOT_LEADER server is not the leader */
int raft_recv_appendentries_response(raft_server_t* me,
raft_node_t* node,
raft_appendentries_resp_t* resp);
int raft_recv_appendentries_response(raft_server_t *me,
raft_node_t *node,
raft_appendentries_resp_t *resp);
/** Receive a snapshot message.
* @param[in] node The node who sent us this message
......@@ -1025,8 +1022,8 @@ int raft_recv_snapshot(raft_server_t* me,
* 0 on success;
* -1 on error;
* RAFT_ERR_NOT_LEADER server is not the leader */
int raft_recv_snapshot_response(raft_server_t* me,
raft_node_t* node,
int raft_recv_snapshot_response(raft_server_t *me,
raft_node_t *node,
raft_snapshot_resp_t *resp);
/** Receive a requestvote message.
......@@ -1034,20 +1031,20 @@ int raft_recv_snapshot_response(raft_server_t* me,
* @param[in] req The requestvote message
* @param[out] resp The resulting response
* @return 0 on success */
int raft_recv_requestvote(raft_server_t* me,
raft_node_t* node,
raft_requestvote_req_t* req,
raft_requestvote_resp_t* resp);
int raft_recv_requestvote(raft_server_t *me,
raft_node_t *node,
raft_requestvote_req_t *req,
raft_requestvote_resp_t *resp);
/** Receive a response from a requestvote message we sent.
* @param[in] node The node this response was sent by
* @param[in] req The requestvote response message
* @param[in] resp The requestvote response message
* @return
* 0 on success;
* RAFT_ERR_SHUTDOWN server MUST shutdown; */
int raft_recv_requestvote_response(raft_server_t* me,
raft_node_t* node,
raft_requestvote_resp_t* req);
int raft_recv_requestvote_response(raft_server_t *me,
raft_node_t *node,
raft_requestvote_resp_t *resp);
/** Receive an entry message from the client.
*
......@@ -1073,7 +1070,7 @@ int raft_recv_requestvote_response(raft_server_t* me,
* RAFT_ERR_ONE_VOTING_CHANGE_ONLY there is a non-voting change inflight;
* RAFT_ERR_NOMEM memory allocation failure
*/
int raft_recv_entry(raft_server_t* me,
int raft_recv_entry(raft_server_t *me,
raft_entry_req_t *req,
raft_entry_resp_t *resp);
......@@ -1284,11 +1281,11 @@ int raft_apply_all(raft_server_t* me);
/** Become leader
* WARNING: this is a dangerous function call. It could lead to your cluster
* losing it's consensus guarantees. */
int raft_become_leader(raft_server_t* me);
int raft_become_leader(raft_server_t *me);
/** Become follower. This may be used to give up leadership. It does not change
* currentTerm. */
void raft_become_follower(raft_server_t* me);
void raft_become_follower(raft_server_t *me);
/** Determine if entry is voting configuration change.
* @param[in] ety The entry to query.
......
......@@ -133,13 +133,13 @@ struct raft_server {
int disable_apply; /* Do not apply entries, useful for testing */
};
int raft_election_start(raft_server_t* me, int skip_precandidate);
int raft_election_start(raft_server_t *me, int skip_precandidate);
int raft_become_candidate(raft_server_t* me);
int raft_become_candidate(raft_server_t *me);
int raft_become_precandidate(raft_server_t* me);
int raft_become_precandidate(raft_server_t *me);
void raft_randomize_election_timeout(raft_server_t* me);
void raft_randomize_election_timeout(raft_server_t *me);
void raft_update_quorum_meta(raft_server_t* me, raft_msg_id_t id);
......
This diff is collapsed.
......@@ -4064,7 +4064,7 @@ void TestRaft_quorum_msg_id_correctness(CuTest * tc)
int timeoutnow_sent = 0;
int __fake_timeoutnow(raft_server_t* raft, void *udata, raft_node_t* node)
int cb_timeoutnow(raft_server_t* raft, void *udata, raft_node_t* node)
{
timeoutnow_sent = 1;
......@@ -4076,7 +4076,7 @@ void TestRaft_callback_timeoutnow_at_set_if_up_to_date(CuTest *tc)
timeoutnow_sent = 0;
raft_cbs_t funcs = {
.send_timeoutnow = __fake_timeoutnow,
.send_timeoutnow = cb_timeoutnow,
};
raft_server_t *r = raft_new();
......@@ -4111,7 +4111,7 @@ void TestRaft_callback_timeoutnow_at_send_appendentries_response_if_up_to_date(C
timeoutnow_sent = 0;
raft_cbs_t funcs = {
.send_timeoutnow = __fake_timeoutnow,
.send_timeoutnow = cb_timeoutnow,
};
raft_server_t *r = raft_new();
......@@ -4439,6 +4439,7 @@ void Test_reset_transfer_leader(CuTest *tc)
raft_leader_transfer_e state;
raft_cbs_t funcs = {
.notify_transfer_event = cb_notify_transfer_event,
.send_timeoutnow = cb_timeoutnow,
};
raft_server_t *r = raft_new();
raft_set_state(r, RAFT_STATE_LEADER);
......@@ -4471,6 +4472,7 @@ void Test_transfer_leader_success(CuTest *tc)
raft_leader_transfer_e state = RAFT_LEADER_TRANSFER_TIMEOUT;
raft_cbs_t funcs = {
.notify_transfer_event = cb_notify_transfer_event,
.send_timeoutnow = cb_timeoutnow
};
raft_server_t *r = raft_new();
raft_set_callbacks(r, &funcs, &state);
......@@ -4496,6 +4498,7 @@ void Test_transfer_leader_unexpected(CuTest *tc)
raft_leader_transfer_e state = RAFT_LEADER_TRANSFER_TIMEOUT;
raft_cbs_t funcs = {
.notify_transfer_event = cb_notify_transfer_event,
.send_timeoutnow = cb_timeoutnow
};
raft_server_t *r = raft_new();
raft_set_callbacks(r, &funcs, &state);
......
......@@ -331,13 +331,12 @@ def handle_read_queue(arg, can_read):
logger.debug(f"ignoring read_request {val}")
def raft_log(raft, node, udata, buf):
def raft_log(raft, udata, buf):
server = ffi.from_handle(lib.raft_get_udata(raft))
# if server.id in [1] or (node and node.id in [1]):
logger.info('{0}> {1}:{2}: {3}'.format(
logger.info('{0}> {1}: {2}'.format(
server.network.iteration,
server.id,
node,
ffi.string(buf).decode('utf8'),
))
......@@ -956,7 +955,7 @@ class RaftServer(object):
self.raft_get_node_id = ffi.callback("int(raft_server_t*, void*, raft_entry_t*, raft_index_t)", raft_get_node_id)
self.raft_node_has_sufficient_logs = ffi.callback("int(raft_server_t* raft, void *user_data, raft_node_t* node)", raft_node_has_sufficient_logs)
self.raft_notify_membership_event = ffi.callback("void(raft_server_t* raft, void *user_data, raft_node_t* node, raft_entry_t* ety, raft_membership_e)", raft_notify_membership_event)
self.raft_log = ffi.callback("void(raft_server_t*, raft_node_id_t, void*, const char* buf)", raft_log)
self.raft_log = ffi.callback("void(raft_server_t*, void*, const char* buf)", raft_log)
self.handle_read_queue = ffi.callback("void(void *arg, int can_read)", handle_read_queue)
def recv_entry(self, ety):
......
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