Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove user data passing. #64

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
41 changes: 4 additions & 37 deletions include/raft.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,30 +196,26 @@ typedef void* raft_node_t;

/** Callback for sending request vote messages.
* @param[in] raft The Raft server making this callback
* @param[in] user_data User data that is passed from Raft server
* @param[in] node The node's ID that we are sending this message to
* @param[in] msg The request vote message to be sent
* @return 0 on success */
typedef int (
*func_send_requestvote_f
) (
raft_server_t* raft,
void *user_data,
raft_node_t* node,
msg_requestvote_t* msg
);

/** Callback for sending append entries messages.
* @param[in] raft The Raft server making this callback
* @param[in] user_data User data that is passed from Raft server
* @param[in] node The node's ID that we are sending this message to
* @param[in] msg The appendentries message to be sent
* @return 0 on success */
typedef int (
*func_send_appendentries_f
) (
raft_server_t* raft,
void *user_data,
raft_node_t* node,
msg_appendentries_t* msg
);
Expand All @@ -229,28 +225,24 @@ typedef int (
* Callback for telling the user to send a snapshot.
*
* @param[in] raft Raft server making this callback
* @param[in] user_data User data that is passed from Raft server
* @param[in] node Node's ID that needs a snapshot sent to
**/
typedef int (
*func_send_snapshot_f
) (
raft_server_t* raft,
void *user_data,
raft_node_t* node
);

/** Callback for detecting when non-voting nodes have obtained enough logs.
* This triggers only when there are no pending configuration changes.
* @param[in] raft The Raft server making this callback
* @param[in] user_data User data that is passed from Raft server
* @param[in] node The node
* @return 0 does not want to be notified again; otherwise -1 */
typedef int (
*func_node_has_sufficient_logs_f
) (
raft_server_t* raft,
void *user_data,
raft_node_t* node
);

Expand All @@ -260,45 +252,39 @@ typedef int (
* This callback is optional
* @param[in] raft The Raft server making this callback
* @param[in] node The node that is the subject of this log. Could be NULL.
* @param[in] user_data User data that is passed from Raft server
* @param[in] buf The buffer that was logged */
typedef void (
*func_log_f
) (
raft_server_t* raft,
raft_node_t* node,
void *user_data,
const char *buf
);
#endif

/** Callback for saving who we voted for to disk.
* For safety reasons this callback MUST flush the change to disk.
* @param[in] raft The Raft server making this callback
* @param[in] user_data User data that is passed from Raft server
* @param[in] vote The node we voted for
* @return 0 on success */
typedef int (
*func_persist_vote_f
) (
raft_server_t* raft,
void *user_data,
int vote
);

/** Callback for saving current term (and nil vote) to disk.
* For safety reasons this callback MUST flush the term and vote changes to
* disk atomically.
* @param[in] raft The Raft server making this callback
* @param[in] user_data User data that is passed from Raft server
* @param[in] term Current term
* @param[in] vote The node value dicating we haven't voted for anybody
* @return 0 on success */
typedef int (
*func_persist_term_f
) (
raft_server_t* raft,
void *user_data,
int term,
int vote
);
Expand All @@ -316,7 +302,6 @@ typedef int (
* For safety reasons this callback MUST flush the change to disk.
*
* @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.
* For offering, polling, and popping, the user is allowed to change the
* memory pointed to in the raft_entry_data_t struct. This MUST be done if
Expand All @@ -327,7 +312,6 @@ typedef int (
*func_logentry_event_f
) (
raft_server_t* raft,
void *user_data,
raft_entry_t *entry,
int entry_idx
);
Expand Down Expand Up @@ -415,8 +399,8 @@ void raft_clear(raft_server_t* me);
/** Set callbacks and user data.
*
* @param[in] funcs Callbacks
* @param[in] user_data "User data" - user's context that's included in a callback */
void raft_set_callbacks(raft_server_t* me, raft_cbs_t* funcs, void* user_data);
*/
void raft_set_callbacks(raft_server_t* me, raft_cbs_t* funcs);

/** Add node.
*
Expand All @@ -426,18 +410,13 @@ void raft_set_callbacks(raft_server_t* me, raft_cbs_t* funcs, void* user_data);
* This call MUST be made in the same order as the other raft nodes.
* This is because the node ID is assigned depending on when this call is made
*
* @param[in] user_data The user data for the node.
* This is obtained using raft_node_get_udata.
* Examples of what this could be:
* - void* pointing to implementor's networking data
* - a (IP,Port) tuple
* @param[in] id The integer ID of this node
* This is used for identifying clients across sessions.
* @param[in] is_self Set to 1 if this "node" is this server
* @return
* node if it was successfully added;
* NULL if the node already exists */
raft_node_t* raft_add_node(raft_server_t* me, void* user_data, int id, int is_self);
raft_node_t* raft_add_node(raft_server_t* me, int id, int is_self);

#define raft_add_peer raft_add_node

Expand All @@ -447,7 +426,7 @@ raft_node_t* raft_add_node(raft_server_t* me, void* user_data, int id, int is_se
* @return
* node if it was successfully added;
* NULL if the node already exists */
raft_node_t* raft_add_non_voting_node(raft_server_t* me_, void* udata, int id, int is_self);
raft_node_t* raft_add_non_voting_node(raft_server_t* me_, int id, int is_self);

/** Remove node.
* @param node The node to be removed. */
Expand Down Expand Up @@ -629,14 +608,6 @@ int raft_node_get_next_idx(raft_node_t* node);
* @return this node's user data */
int raft_node_get_match_idx(raft_node_t* me);

/**
* @return this node's user data */
void* raft_node_get_udata(raft_node_t* me);

/**
* Set this node's user data */
void raft_node_set_udata(raft_node_t* me, void* user_data);

/**
* @param[in] idx The entry's index
* @return entry from index */
Expand Down Expand Up @@ -671,10 +642,6 @@ int raft_get_current_leader(raft_server_t* me);
* NULL if the leader is unknown */
raft_node_t* raft_get_current_leader_node(raft_server_t* me);

/**
* @return callback user data */
void* raft_get_udata(raft_server_t* me);

/** Vote for a server.
* This should be used to reload persistent state, ie. the voted-for field.
* @param[in] node The server to vote for
Expand Down
3 changes: 1 addition & 2 deletions include/raft_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ typedef struct {

/* callbacks */
raft_cbs_t cb;
void* udata;

/* my node ID */
raft_node_t* node;
Expand Down Expand Up @@ -108,7 +107,7 @@ void raft_set_state(raft_server_t* me_, int state);

int raft_get_state(raft_server_t* me_);

raft_node_t* raft_node_new(void* udata, int id);
raft_node_t* raft_node_new(int id);

void raft_node_free(raft_node_t* me_);

Expand Down
9 changes: 3 additions & 6 deletions src/raft_log.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,7 @@ int log_append_entry(log_t* me_, raft_entry_t* ety)

if (me->cb && me->cb->log_offer)
{
void* ud = raft_get_udata(me->raft);
e = me->cb->log_offer(me->raft, ud, &me->entries[me->back], idx);
e = me->cb->log_offer(me->raft, &me->entries[me->back], idx);
if (0 != e)
return e;
raft_offer_log(me->raft, &me->entries[me->back], idx);
Expand Down Expand Up @@ -237,8 +236,7 @@ int log_delete(log_t* me_, int idx)

if (me->cb && me->cb->log_pop)
{
int e = me->cb->log_pop(me->raft, raft_get_udata(me->raft),
&me->entries[back], idx_tmp);
int e = me->cb->log_pop(me->raft, &me->entries[back], idx_tmp);
if (0 != e)
return e;
}
Expand All @@ -260,8 +258,7 @@ int log_poll(log_t * me_, void** etyp)
const void *elem = &me->entries[me->front];
if (me->cb && me->cb->log_poll)
{
int e = me->cb->log_poll(me->raft, raft_get_udata(me->raft),
&me->entries[me->front], idx);
int e = me->cb->log_poll(me->raft, &me->entries[me->front], idx);
if (0 != e)
return e;
}
Expand Down
17 changes: 1 addition & 16 deletions src/raft_node.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@

typedef struct
{
void* udata;

int next_idx;
int match_idx;

Expand All @@ -36,13 +34,12 @@ typedef struct
int id;
} raft_node_private_t;

raft_node_t* raft_node_new(void* udata, int id)
raft_node_t* raft_node_new(int id)
{
raft_node_private_t* me;
me = (raft_node_private_t*)__raft_calloc(1, sizeof(raft_node_private_t));
if (!me)
return NULL;
me->udata = udata;
me->next_idx = 1;
me->match_idx = 0;
me->id = id;
Expand Down Expand Up @@ -80,18 +77,6 @@ void raft_node_set_match_idx(raft_node_t* me_, int matchIdx)
me->match_idx = matchIdx;
}

void* raft_node_get_udata(raft_node_t* me_)
{
raft_node_private_t* me = (raft_node_private_t*)me_;
return me->udata;
}

void raft_node_set_udata(raft_node_t* me_, void* udata)
{
raft_node_private_t* me = (raft_node_private_t*)me_;
me->udata = udata;
}

void raft_node_vote_for_me(raft_node_t* me_, const int vote)
{
raft_node_private_t* me = (raft_node_private_t*)me_;
Expand Down