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

Define separate callback function for node id retrieval (#55)

Define separate callback function for node id retrieval
parent 36efee07
...@@ -355,6 +355,25 @@ typedef int ( ...@@ -355,6 +355,25 @@ typedef int (
* */ * */
typedef int ( typedef int (
*func_logentry_event_f *func_logentry_event_f
) (
raft_server_t* raft,
void *user_data,
raft_entry_t *entry,
raft_index_t entry_idx
);
/** Callback for determining which node this configuration log entry
* affects. This call only applies to configuration change log entries.
* @return the node ID of the node
*
* @param[in] raft The Raft server making this callback
* @param[in] user_data User data that is passed from Raft server
* @param[in] entry The entry that the event is happening to.
* @param[in] entry_idx The entries index in the log
* @return the node ID of the node
* */
typedef raft_node_id_t (
*func_get_node_id_f
) ( ) (
raft_server_t* raft, raft_server_t* raft,
void *user_data, void *user_data,
...@@ -427,7 +446,7 @@ typedef struct ...@@ -427,7 +446,7 @@ typedef struct
/** Callback for determining which node this configuration log entry /** Callback for determining which node this configuration log entry
* affects. This call only applies to configuration change log entries. * affects. This call only applies to configuration change log entries.
* @return the node ID of the node */ * @return the node ID of the node */
func_logentry_event_f log_get_node_id; func_get_node_id_f get_node_id;
/** Callback for detecting when a non-voting node has sufficient logs. */ /** Callback for detecting when a non-voting node has sufficient logs. */
func_node_has_sufficient_logs_f node_has_sufficient_logs; func_node_has_sufficient_logs_f node_has_sufficient_logs;
......
...@@ -266,11 +266,11 @@ void raft_handle_append_cfg_change(raft_server_t* me_, raft_entry_t* ety, raft_i ...@@ -266,11 +266,11 @@ void raft_handle_append_cfg_change(raft_server_t* me_, raft_entry_t* ety, raft_i
if (!raft_entry_is_cfg_change(ety)) if (!raft_entry_is_cfg_change(ety))
return; return;
if (!me->cb.log_get_node_id) if (!me->cb.get_node_id)
return; return;
void* udata = raft_get_udata(me_); void* udata = raft_get_udata(me_);
raft_node_id_t node_id = me->cb.log_get_node_id(me_, udata, ety, idx); raft_node_id_t node_id = me->cb.get_node_id(me_, udata, ety, idx);
raft_node_t* node = raft_get_node(me_, node_id); raft_node_t* node = raft_get_node(me_, node_id);
int is_self = node_id == raft_get_nodeid(me_); int is_self = node_id == raft_get_nodeid(me_);
...@@ -315,11 +315,11 @@ void raft_handle_remove_cfg_change(raft_server_t* me_, raft_entry_t* ety, const ...@@ -315,11 +315,11 @@ void raft_handle_remove_cfg_change(raft_server_t* me_, raft_entry_t* ety, const
if (!raft_entry_is_cfg_change(ety)) if (!raft_entry_is_cfg_change(ety))
return; return;
if (!me->cb.log_get_node_id) if (!me->cb.get_node_id)
return; return;
void* udata = raft_get_udata(me_); void* udata = raft_get_udata(me_);
raft_node_id_t node_id = me->cb.log_get_node_id(me_, udata, ety, idx); raft_node_id_t node_id = me->cb.get_node_id(me_, udata, ety, idx);
raft_node_t* node = raft_get_node(me_, node_id); raft_node_t* node = raft_get_node(me_, node_id);
switch (ety->type) switch (ety->type)
...@@ -1194,7 +1194,7 @@ int raft_apply_entry(raft_server_t* me_) ...@@ -1194,7 +1194,7 @@ int raft_apply_entry(raft_server_t* me_)
if (!raft_entry_is_cfg_change(ety)) if (!raft_entry_is_cfg_change(ety))
goto exit; goto exit;
raft_node_id_t node_id = me->cb.log_get_node_id(me_, raft_get_udata(me_), ety, log_idx); raft_node_id_t node_id = me->cb.get_node_id(me_, raft_get_udata(me_), ety, log_idx);
raft_node_t* node = raft_get_node(me_, node_id); raft_node_t* node = raft_get_node(me_, node_id);
switch (ety->type) { switch (ety->type) {
......
...@@ -31,7 +31,7 @@ static void __LOG_APPEND_ENTRIES_SEQ_ID(void *l, int count, int id, raft_term_t ...@@ -31,7 +31,7 @@ static void __LOG_APPEND_ENTRIES_SEQ_ID(void *l, int count, int id, raft_term_t
} }
} }
static int __logentry_get_node_id( static raft_node_id_t __get_node_id(
raft_server_t* raft, raft_server_t* raft,
void *udata, void *udata,
raft_entry_t *ety, raft_entry_t *ety,
...@@ -76,8 +76,7 @@ static int __log_pop_failing( ...@@ -76,8 +76,7 @@ static int __log_pop_failing(
} }
raft_cbs_t funcs = { raft_cbs_t funcs = {
.log_get_node_id = __logentry_get_node_id .get_node_id = __get_node_id};
};
raft_log_cbs_t log_funcs = { raft_log_cbs_t log_funcs = {
.log_pop = __log_pop .log_pop = __log_pop
...@@ -147,7 +146,7 @@ void TestLog_delete(CuTest * tc) ...@@ -147,7 +146,7 @@ void TestLog_delete(CuTest * tc)
void* queue = llqueue_new(); void* queue = llqueue_new();
void *r = raft_new(); void *r = raft_new();
raft_cbs_t funcs = { raft_cbs_t funcs = {
.log_get_node_id = __logentry_get_node_id .get_node_id = __get_node_id
}; };
raft_log_cbs_t log_funcs = { raft_log_cbs_t log_funcs = {
.log_pop = __log_pop .log_pop = __log_pop
...@@ -182,8 +181,7 @@ void TestLog_delete_onwards(CuTest * tc) ...@@ -182,8 +181,7 @@ void TestLog_delete_onwards(CuTest * tc)
void* queue = llqueue_new(); void* queue = llqueue_new();
void *r = raft_new(); void *r = raft_new();
raft_cbs_t funcs = { raft_cbs_t funcs = {
.log_get_node_id = __logentry_get_node_id .get_node_id = __get_node_id};
};
raft_log_cbs_t log_funcs = { raft_log_cbs_t log_funcs = {
.log_pop = __log_pop .log_pop = __log_pop
}; };
...@@ -212,8 +210,7 @@ void TestLog_delete_handles_log_pop_failure(CuTest * tc) ...@@ -212,8 +210,7 @@ void TestLog_delete_handles_log_pop_failure(CuTest * tc)
void* queue = llqueue_new(); void* queue = llqueue_new();
void *r = raft_new(); void *r = raft_new();
raft_cbs_t funcs = { raft_cbs_t funcs = {
.log_get_node_id = __logentry_get_node_id .get_node_id = __get_node_id};
};
raft_log_cbs_t log_funcs = { raft_log_cbs_t log_funcs = {
.log_pop = __log_pop_failing .log_pop = __log_pop_failing
}; };
...@@ -237,8 +234,7 @@ void TestLog_delete_fails_for_idx_zero(CuTest * tc) ...@@ -237,8 +234,7 @@ void TestLog_delete_fails_for_idx_zero(CuTest * tc)
void* queue = llqueue_new(); void* queue = llqueue_new();
void *r = raft_new(); void *r = raft_new();
raft_cbs_t funcs = { raft_cbs_t funcs = {
.log_get_node_id = __logentry_get_node_id .get_node_id = __get_node_id};
};
raft_log_cbs_t log_funcs = { raft_log_cbs_t log_funcs = {
.log_pop = __log_pop .log_pop = __log_pop
}; };
...@@ -258,8 +254,7 @@ void TestLog_poll(CuTest * tc) ...@@ -258,8 +254,7 @@ void TestLog_poll(CuTest * tc)
void* queue = llqueue_new(); void* queue = llqueue_new();
void *r = raft_new(); void *r = raft_new();
raft_cbs_t funcs = { raft_cbs_t funcs = {
.log_get_node_id = __logentry_get_node_id .get_node_id = __get_node_id};
};
raft_log_cbs_t log_funcs = { raft_log_cbs_t log_funcs = {
.log_pop = __log_pop .log_pop = __log_pop
}; };
...@@ -450,8 +445,7 @@ void TestLog_delete_after_polling_from_double_append(CuTest * tc) ...@@ -450,8 +445,7 @@ void TestLog_delete_after_polling_from_double_append(CuTest * tc)
void* queue = llqueue_new(); void* queue = llqueue_new();
void *r = raft_new(); void *r = raft_new();
raft_cbs_t funcs = { raft_cbs_t funcs = {
.log_get_node_id = __logentry_get_node_id .get_node_id = __get_node_id};
};
raft_log_cbs_t log_funcs = { raft_log_cbs_t log_funcs = {
.log_pop = __log_pop .log_pop = __log_pop
}; };
...@@ -487,8 +481,7 @@ void TestLog_get_from_idx_with_base_off_by_one(CuTest * tc) ...@@ -487,8 +481,7 @@ void TestLog_get_from_idx_with_base_off_by_one(CuTest * tc)
void* queue = llqueue_new(); void* queue = llqueue_new();
void *r = raft_new(); void *r = raft_new();
raft_cbs_t funcs = { raft_cbs_t funcs = {
.log_get_node_id = __logentry_get_node_id .get_node_id = __get_node_id};
};
raft_log_cbs_t log_funcs = { raft_log_cbs_t log_funcs = {
.log_pop = __log_pop .log_pop = __log_pop
}; };
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "raft.h" #include "raft.h"
#include "helpers.h" #include "helpers.h"
static int __logentry_get_node_id( static raft_node_id_t __get_node_id(
raft_server_t* raft, raft_server_t* raft,
void *udata, void *udata,
raft_entry_t *ety, raft_entry_t *ety,
...@@ -131,8 +131,7 @@ void TestLogImpl_pop(CuTest * tc) ...@@ -131,8 +131,7 @@ void TestLogImpl_pop(CuTest * tc)
void *r = raft_new(); void *r = raft_new();
raft_cbs_t funcs = { raft_cbs_t funcs = {
.log_get_node_id = __logentry_get_node_id .get_node_id = __get_node_id};
};
raft_set_callbacks(r, &funcs, NULL); raft_set_callbacks(r, &funcs, NULL);
......
...@@ -70,7 +70,7 @@ static int __raft_send_appendentries(raft_server_t* raft, ...@@ -70,7 +70,7 @@ static int __raft_send_appendentries(raft_server_t* raft,
return 0; return 0;
} }
static int __raft_log_get_node_id(raft_server_t* raft, static raft_node_id_t __raft_get_node_id(raft_server_t* raft,
void *udata, void *udata,
raft_entry_t *entry, raft_entry_t *entry,
raft_index_t entry_idx) raft_index_t entry_idx)
...@@ -3737,7 +3737,7 @@ void TestRaft_leader_recv_entry_add_nonvoting_node_remove_and_revert(CuTest *tc) ...@@ -3737,7 +3737,7 @@ void TestRaft_leader_recv_entry_add_nonvoting_node_remove_and_revert(CuTest *tc)
.applylog = __raft_applylog, .applylog = __raft_applylog,
.persist_term = __raft_persist_term, .persist_term = __raft_persist_term,
.node_has_sufficient_logs = __raft_node_has_sufficient_logs, .node_has_sufficient_logs = __raft_node_has_sufficient_logs,
.log_get_node_id = __raft_log_get_node_id .get_node_id = __raft_get_node_id
}; };
raft_log_cbs_t log_funcs = { raft_log_cbs_t log_funcs = {
.log_offer = __raft_log_offer .log_offer = __raft_log_offer
...@@ -3785,8 +3785,7 @@ void TestRaft_leader_recv_appendentries_response_set_has_sufficient_logs_after_v ...@@ -3785,8 +3785,7 @@ void TestRaft_leader_recv_appendentries_response_set_has_sufficient_logs_after_v
.applylog = __raft_applylog, .applylog = __raft_applylog,
.persist_term = __raft_persist_term, .persist_term = __raft_persist_term,
.node_has_sufficient_logs = __raft_node_has_sufficient_logs, .node_has_sufficient_logs = __raft_node_has_sufficient_logs,
.log_get_node_id = __raft_log_get_node_id .get_node_id = __raft_get_node_id};
};
raft_log_cbs_t log_funcs = { raft_log_cbs_t log_funcs = {
.log_offer = __raft_log_offer .log_offer = __raft_log_offer
}; };
...@@ -4120,8 +4119,7 @@ void TestRaft_recv_appendreq_from_unknown_node(CuTest * tc) ...@@ -4120,8 +4119,7 @@ void TestRaft_recv_appendreq_from_unknown_node(CuTest * tc)
void TestRaft_unknown_node_can_become_leader(CuTest * tc) void TestRaft_unknown_node_can_become_leader(CuTest * tc)
{ {
raft_cbs_t funcs = { raft_cbs_t funcs = {
.log_get_node_id = __raft_log_get_node_id .get_node_id = __raft_get_node_id};
};
void *r = raft_new(); void *r = raft_new();
raft_set_callbacks(r, &funcs, NULL); raft_set_callbacks(r, &funcs, NULL);
...@@ -4211,8 +4209,7 @@ void TestRaft_unknown_node_can_become_leader(CuTest * tc) ...@@ -4211,8 +4209,7 @@ void TestRaft_unknown_node_can_become_leader(CuTest * tc)
void TestRaft_removed_node_starts_election(CuTest * tc) void TestRaft_removed_node_starts_election(CuTest * tc)
{ {
raft_cbs_t funcs = { raft_cbs_t funcs = {
.log_get_node_id = __raft_log_get_node_id .get_node_id = __raft_get_node_id};
};
void *r = raft_new(); void *r = raft_new();
raft_set_callbacks(r, &funcs, NULL); raft_set_callbacks(r, &funcs, NULL);
......
...@@ -211,7 +211,7 @@ def raft_logentry_pop(raft, udata, ety, ety_idx): ...@@ -211,7 +211,7 @@ def raft_logentry_pop(raft, udata, ety, ety_idx):
return ffi.from_handle(udata).entry_pop(ety, ety_idx) return ffi.from_handle(udata).entry_pop(ety, ety_idx)
def raft_logentry_get_node_id(raft, udata, ety, ety_idx): def raft_get_node_id(raft, udata, ety, ety_idx):
change_entry = ffi.from_handle(lib.raft_entry_getdata(ety)) change_entry = ffi.from_handle(lib.raft_entry_getdata(ety))
assert isinstance(change_entry, ChangeRaftEntry) assert isinstance(change_entry, ChangeRaftEntry)
return change_entry.node_id return change_entry.node_id
...@@ -773,7 +773,7 @@ class RaftServer(object): ...@@ -773,7 +773,7 @@ class RaftServer(object):
cbs.applylog = self.raft_applylog cbs.applylog = self.raft_applylog
cbs.persist_vote = self.raft_persist_vote cbs.persist_vote = self.raft_persist_vote
cbs.persist_term = self.raft_persist_term cbs.persist_term = self.raft_persist_term
cbs.log_get_node_id = self.raft_logentry_get_node_id cbs.get_node_id = self.raft_get_node_id
cbs.node_has_sufficient_logs = self.raft_node_has_sufficient_logs cbs.node_has_sufficient_logs = self.raft_node_has_sufficient_logs
cbs.notify_membership_event = self.raft_notify_membership_event cbs.notify_membership_event = self.raft_notify_membership_event
cbs.log = self.raft_log cbs.log = self.raft_log
...@@ -872,7 +872,7 @@ class RaftServer(object): ...@@ -872,7 +872,7 @@ class RaftServer(object):
self.raft_logentry_offer = ffi.callback("int(raft_server_t*, void*, raft_entry_t*, raft_index_t)", raft_logentry_offer) self.raft_logentry_offer = ffi.callback("int(raft_server_t*, void*, raft_entry_t*, raft_index_t)", raft_logentry_offer)
self.raft_logentry_poll = ffi.callback("int(raft_server_t*, void*, raft_entry_t*, raft_index_t)", raft_logentry_poll) self.raft_logentry_poll = ffi.callback("int(raft_server_t*, void*, raft_entry_t*, raft_index_t)", raft_logentry_poll)
self.raft_logentry_pop = ffi.callback("int(raft_server_t*, void*, raft_entry_t*, raft_index_t)", raft_logentry_pop) self.raft_logentry_pop = ffi.callback("int(raft_server_t*, void*, raft_entry_t*, raft_index_t)", raft_logentry_pop)
self.raft_logentry_get_node_id = ffi.callback("int(raft_server_t*, void*, raft_entry_t*, raft_index_t)", raft_logentry_get_node_id) 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_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_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*, raft_node_id_t, void*, const char* buf)", raft_log)
......
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