Commit be7bcd03 authored by willem's avatar willem
Browse files

Removed raft_connection.h

parent 95aba85e
...@@ -135,9 +135,13 @@ typedef struct { ...@@ -135,9 +135,13 @@ typedef struct {
typedef void* raft_server_t; typedef void* raft_server_t;
typedef void* raft_node_t; typedef void* raft_node_t;
/**
* Initialise a new raft server */
raft_server_t* raft_new(); raft_server_t* raft_new();
int raft_get_voted_for(raft_server_t* me); /**
* De-Initialise raft server */
void raft_free(raft_server_t* me_);
void raft_set_callbacks(raft_server_t* me, raft_cbs_t* funcs, void* caller); void raft_set_callbacks(raft_server_t* me, raft_cbs_t* funcs, void* caller);
...@@ -149,13 +153,27 @@ void raft_become_candidate(raft_server_t* me); ...@@ -149,13 +153,27 @@ void raft_become_candidate(raft_server_t* me);
int raft_receive_append_entries(raft_server_t* me, msg_appendentries_t* ae); int raft_receive_append_entries(raft_server_t* me, msg_appendentries_t* ae);
/**
* @return 0 on error */
int raft_periodic(raft_server_t* me, int msec_since_last_period); int raft_periodic(raft_server_t* me, int msec_since_last_period);
int raft_recv_appendentries(raft_server_t* me, int node, msg_appendentries_t* ae); /**
* @return 0 on error */
int raft_recv_appendentries_response(raft_server_t* me_,
int node, msg_appendentries_response_t* aer);
/**
* @return 0 on error */
int raft_recv_appendentries(raft_server_t* me, int node,
msg_appendentries_t* ae);
int raft_recv_requestvote(raft_server_t* me, int node, msg_requestvote_t* vr); int raft_recv_requestvote(raft_server_t* me, int node,
msg_requestvote_t* vr);
int raft_recv_requestvote_response(raft_server_t* me, int node, msg_requestvote_response_t* r); /**
* @param node The node this response was sent by */
int raft_recv_requestvote_response(raft_server_t* me, int node,
msg_requestvote_response_t* r);
void raft_execute_entry(raft_server_t* me); void raft_execute_entry(raft_server_t* me);
...@@ -169,10 +187,18 @@ raft_node_t* raft_add_node(raft_server_t* me, int node_udata); ...@@ -169,10 +187,18 @@ raft_node_t* raft_add_node(raft_server_t* me, int node_udata);
int raft_remove_node(raft_server_t* me, int node); int raft_remove_node(raft_server_t* me, int node);
/**
* @return number of nodes that this server has */
int raft_get_num_nodes(raft_server_t* me); int raft_get_num_nodes(raft_server_t* me);
/**
* Receive an ENTRY message.
* Append entry to log
* Send APPENDENTRIES to followers */
int raft_recv_entry(raft_server_t* me, int node, msg_entry_t* cmd); int raft_recv_entry(raft_server_t* me, int node, msg_entry_t* cmd);
/**
* @return number of items within log */
int raft_get_log_count(raft_server_t* me); int raft_get_log_count(raft_server_t* me);
void raft_set_current_term(raft_server_t* me,int term); void raft_set_current_term(raft_server_t* me,int term);
...@@ -191,12 +217,18 @@ int raft_is_leader(raft_server_t* me); ...@@ -191,12 +217,18 @@ int raft_is_leader(raft_server_t* me);
int raft_is_candidate(raft_server_t* me); int raft_is_candidate(raft_server_t* me);
/**
* @return 0 on error */
int raft_send_requestvote(raft_server_t* me, int node); int raft_send_requestvote(raft_server_t* me, int node);
void raft_send_appendentries(raft_server_t* me, int node); void raft_send_appendentries(raft_server_t* me, int node);
void raft_send_appendentries_all(raft_server_t* me_); void raft_send_appendentries_all(raft_server_t* me_);
/**
* Appends entry using the current term.
* Note: we make the assumption that current term is up-to-date
* @return 0 if unsuccessful */
int raft_append_entry(raft_server_t* me_, raft_entry_t* c); int raft_append_entry(raft_server_t* me_, raft_entry_t* c);
int raft_get_timeout_elapsed(raft_server_t* me); int raft_get_timeout_elapsed(raft_server_t* me);
...@@ -219,11 +251,18 @@ int raft_node_get_next_idx(raft_node_t* node); ...@@ -219,11 +251,18 @@ int raft_node_get_next_idx(raft_node_t* node);
void raft_node_set_next_idx(raft_node_t* node, int nextIdx); void raft_node_set_next_idx(raft_node_t* node, int nextIdx);
/**
* Set configuration
* @param nodes Array of nodes, end of array is marked by NULL entry
* @param me_idx Which node is myself */
void raft_set_configuration(raft_server_t* me_, void raft_set_configuration(raft_server_t* me_,
raft_node_configuration_t* nodes, int me_idx); raft_node_configuration_t* nodes, int me_idx);
int raft_votes_is_majority(const int nnodes, const int nvotes); int raft_votes_is_majority(const int nnodes, const int nvotes);
/**
* Apply entry at lastApplied + 1. Entry becomes 'committed'.
* @return 1 if entry committed, 0 otherwise */
int raft_apply_entry(raft_server_t* me_); int raft_apply_entry(raft_server_t* me_);
raft_entry_t* raft_get_entry_from_idx(raft_server_t* me_, int idx); raft_entry_t* raft_get_entry_from_idx(raft_server_t* me_, int idx);
...@@ -232,3 +271,11 @@ raft_node_t* raft_get_node(raft_server_t *me_, int nodeid); ...@@ -232,3 +271,11 @@ raft_node_t* raft_get_node(raft_server_t *me_, int nodeid);
int raft_get_nodeid(raft_server_t* me_); int raft_get_nodeid(raft_server_t* me_);
/**
* @return number of votes this server has received this election */
int raft_get_nvotes_for_me(raft_server_t* me_);
/**
* @return node ID of who I voted for */
int raft_get_voted_for(raft_server_t* me);
typedef struct
{
uint32_t piece_idx;
uint32_t block_byte_offset;
uint32_t block_len;
} bt_block_t;
typedef void *(*func_getpiece_f)( void *udata, unsigned int piece);
typedef void (*func_write_block_to_stream_f)(
void* pce, bt_block_t * blk, unsigned char ** msg);
#ifndef HAVE_FUNC_LOG
#define HAVE_FUNC_LOG
typedef void (
*func_log_f
) (
void *udata,
void *src,
// bt_peer_t * peer,
const char *buf,
...
);
#endif
typedef int (
*func_pollblock_f
) (
void *udata,
void * peers_bitfield,
bt_block_t * blk
);
typedef int (
*func_pushblock_f
) (
void *udata,
void * peer,
bt_block_t * block,
const void *data
);
typedef int (
*func_send_f
) (
void *udata,
const void * peer,
const void *send_data,
const int len
);
typedef int (
*func_disconnect_f
) (
void *udata,
void * peer,
char *reason
);
#ifndef HAVE_FUNC_GET_INT
#define HAVE_FUNC_GET_INT
typedef int (
*func_get_int_f
) (
void *,
void *pr
);
#endif
#define PC_NONE ((unsigned int)0)
#define PC_HANDSHAKE_SENT ((unsigned int)1<<0)
#define PC_HANDSHAKE_RECEIVED ((unsigned int)1<<1)
#define PC_DISCONNECTED ((unsigned int)1<<2)
#define PC_BITFIELD_RECEIVED ((unsigned int)1<<3)
/* connected to peer */
#define PC_CONNECTED ((unsigned int)1<<4)
/* we can't communicate with the peer */
#define PC_UNCONTACTABLE_PEER ((unsigned int)1<<5)
#define PC_IM_CHOKING ((unsigned int)1<<6)
#define PC_IM_INTERESTED ((unsigned int)1<<7)
#define PC_PEER_CHOKING ((unsigned int)1<<8)
#define PC_PEER_INTERESTED ((unsigned int)1<<9)
typedef enum
{
PWP_MSGTYPE_CHOKE = 0,
PWP_MSGTYPE_UNCHOKE = 1,
PWP_MSGTYPE_INTERESTED = 2,
PWP_MSGTYPE_UNINTERESTED = 3,
PWP_MSGTYPE_HAVE = 4,
PWP_MSGTYPE_BITFIELD = 5,
PWP_MSGTYPE_REQUEST = 6,
PWP_MSGTYPE_PIECE = 7,
PWP_MSGTYPE_CANCEL = 8,
} pwp_msg_type_e;
/* peer wire protocol configuration */
typedef struct
{
int max_pending_requests;
} bt_pwp_cfg_t;
void *pwp_conn_get_peer(void *pco);
void *pwp_conn_new();
void pwp_conn_set_active(void *pco, int opt);
int pwp_conn_peer_is_interested(void *pco);
int pwp_conn_is_active(void *pco);
void pwp_conn_set_my_peer_id(void *pco, const char *peer_id);
void pwp_conn_set_their_peer_id(void *pco, const char *peer_id);
void pwp_conn_set_infohash(void *pco, const char *infohash);
void pwp_conn_set_peer(void *pco, void * peer);
int pwp_conn_peer_is_interested(void *pco);
int pwp_conn_peer_is_choked(void *pco);
int pwp_conn_im_choked(void *pco);
int pwp_conn_im_interested(void *pco);
void pwp_conn_choke(void * pc);
void pwp_conn_unchoke(void * pco);
int pwp_conn_get_download_rate(const void * pco);
int pwp_conn_get_upload_rate(const void * pco);
int pwp_conn_send_statechange(void * pco, const unsigned char msg_type);
void pwp_conn_send_piece(void *pco, bt_block_t * req);
int pwp_conn_send_have(void *pco, const int piece_idx);
void pwp_conn_send_request(void *pco, const bt_block_t * request);
void pwp_conn_send_cancel(void *pco, bt_block_t * cancel);
void pwp_conn_send_bitfield(void *pco);
int pwp_conn_recv_handshake(void *pco, const char *info_hash);
int pwp_conn_send_handshake(void *pco);
void pwp_conn_set_piece_info(void *pco, int num_pieces, int piece_len);
void pwp_conn_set_state(void *pco, const int state);
int pwp_conn_get_state(void *pco);
int pwp_conn_mark_peer_has_piece(void *pco, const int piece_idx);
int pwp_conn_process_request(void * pco, bt_block_t * request);
int pwp_conn_process_msg(void *pco);
int pwp_conn_get_npending_requests(const void * pco);
int pwp_conn_get_npending_peer_requests(const void* pco);
void pwp_conn_request_block_from_peer(void * pco, bt_block_t * blk);
void pwp_conn_step(void *pco);
int pwp_conn_peer_has_piece(void *pco, const int piece_idx);
typedef struct {
/** send data to peer */
func_send_f send;
/* drop the connect.
* Most likely because we detected an error with the peer's processing */
func_disconnect_f disconnect;
/* manage piece related operations */
func_write_block_to_stream_f write_block_to_stream;
func_get_int_f piece_is_complete;
func_getpiece_f getpiece;
/**
* Ask our caller if they have an idea of what block they would like.
* We're able to request a block from the peer now.
*
* @return 0 on success; otherwise -1 on failure*/
func_pollblock_f pollblock;
/* We've just downloaded the block and want to allocate it. */
func_pushblock_f pushblock;
/* logging */
func_log_f log;
} pwp_connection_functions_t;
typedef struct {
bt_block_t block;
const void* data;
} msg_piece_t;
typedef struct {
uint32_t piece_idx;
} msg_have_t;
typedef struct {
bitfield_t bf;
} msg_bitfield_t;
void pwp_conn_choke_peer(void * pco);
void pwp_conn_unchoke_peer(void * pco);
void pwp_conn_keepalive(void* pco);
void pwp_conn_choke(void* pco);
void pwp_conn_unchoke(void* pco);
void pwp_conn_interested(void* pco);
void pwp_conn_uninterested(void* pco);
void pwp_conn_have(void* pco, msg_have_t* have);
void pwp_conn_bitfield(void* pco, msg_bitfield_t* bitfield);
int pwp_conn_request(void* pco, bt_block_t *request);
void pwp_conn_cancel(void* pco, bt_block_t *cancel);
int pwp_conn_piece(void* pco, msg_piece_t *piece);
void pwp_conn_set_functions(void *pco, pwp_connection_functions_t* funcs, void* caller);
int pwp_conn_flag_is_set(void *pco, const int flag);
void pwp_conn_connected(void* pco);
void pwp_conn_connect_failed(void *pco);
...@@ -137,162 +137,6 @@ void raft_free(raft_server_t* me_) ...@@ -137,162 +137,6 @@ void raft_free(raft_server_t* me_)
free(me_); free(me_);
} }
void raft_set_election_timeout(raft_server_t* me_, int millisec)
{
raft_server_private_t* me = (void*)me_;
me->election_timeout = millisec;
}
void raft_set_request_timeout(raft_server_t* me_, int millisec)
{
raft_server_private_t* me = (void*)me_;
me->request_timeout = millisec;
}
int raft_get_nodeid(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->nodeid;
}
int raft_get_election_timeout(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->election_timeout;
}
int raft_get_request_timeout(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->request_timeout;
}
void raft_vote(raft_server_t* me_, int node)
{
raft_server_private_t* me = (void*)me_;
me->voted_for = node;
}
int raft_get_num_nodes(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->nnodes;
}
void raft_set_state(raft_server_t* me_, int state)
{
raft_server_private_t* me = (void*)me_;
me->state = state;
}
int raft_get_state(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->state;
}
raft_node_t* raft_get_node(raft_server_t *me_, int nodeid)
{
raft_server_private_t* me = (void*)me_;
if (nodeid < 0 || me->nnodes <= nodeid)
return NULL;
return me->nodes[nodeid];
}
/**
* @return number of nodes that this server has */
int raft_get_nnodes(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->nnodes;
}
int raft_get_timeout_elapsed(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->timeout_elapsed;
}
/**
* @return number of items within log */
int raft_get_log_count(raft_server_t* me_)
{
raft_server_private_t* me = (void*)me_;
return log_count(me->log);
}
int raft_get_voted_for(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->voted_for;
}
void raft_set_current_term(raft_server_t* me_, int term)
{
raft_server_private_t* me = (void*)me_;
me->current_term = term;
}
int raft_get_current_term(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->current_term;
}
void raft_set_current_idx(raft_server_t* me_, int idx)
{
raft_server_private_t* me = (void*)me_;
me->current_idx = idx;
}
int raft_get_current_idx(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->current_idx;
}
int raft_is_follower(raft_server_t* me_)
{
return raft_get_state(me_) == RAFT_STATE_FOLLOWER;
}
int raft_is_leader(raft_server_t* me_)
{
return raft_get_state(me_) == RAFT_STATE_LEADER;
}
int raft_is_candidate(raft_server_t* me_)
{
return raft_get_state(me_) == RAFT_STATE_CANDIDATE;
}
int raft_get_my_id(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->nodeid;
}
void raft_set_commit_idx(raft_server_t* me_, int idx)
{
raft_server_private_t* me = (void*)me_;
me->commit_idx = idx;
}
void raft_set_last_applied_idx(raft_server_t* me_, int idx)
{
raft_server_private_t* me = (void*)me_;
me->last_applied_idx = idx;
}
int raft_get_last_applied_idx(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->last_applied_idx;
}
int raft_get_commit_idx(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->commit_idx;
}
void raft_set_callbacks(raft_server_t* me_,
raft_cbs_t* funcs, void* cb_ctx)
{
raft_server_private_t* me = (void*)me_;
memcpy(&me->cb, funcs, sizeof(raft_cbs_t));
me->cb_ctx = cb_ctx;
}
void raft_election_start(raft_server_t* me_) void raft_election_start(raft_server_t* me_)
{ {
raft_server_private_t* me = (void*)me_; raft_server_private_t* me = (void*)me_;
...@@ -349,8 +193,6 @@ void raft_become_follower(raft_server_t* me_) ...@@ -349,8 +193,6 @@ void raft_become_follower(raft_server_t* me_)
me->voted_for = -1; me->voted_for = -1;
} }
/**
* @return 0 on error */
int raft_periodic(raft_server_t* me_, int msec_since_last_period) int raft_periodic(raft_server_t* me_, int msec_since_last_period)
{ {
raft_server_private_t* me = (void*)me_; raft_server_private_t* me = (void*)me_;
...@@ -395,8 +237,6 @@ raft_entry_t* raft_get_entry_from_idx(raft_server_t* me_, int etyidx) ...@@ -395,8 +237,6 @@ raft_entry_t* raft_get_entry_from_idx(raft_server_t* me_, int etyidx)
return log_get_from_idx(me->log, etyidx); return log_get_from_idx(me->log, etyidx);
} }
/**
* @return 0 on error */
int raft_recv_appendentries_response(raft_server_t* me_, int raft_recv_appendentries_response(raft_server_t* me_,
int node, msg_appendentries_response_t* aer) int node, msg_appendentries_response_t* aer)
{ {
...@@ -445,8 +285,6 @@ int raft_recv_appendentries_response(raft_server_t* me_, ...@@ -445,8 +285,6 @@ int raft_recv_appendentries_response(raft_server_t* me_,
return 1; return 1;
} }
/**
* @return 0 on error */
int raft_recv_appendentries( int raft_recv_appendentries(
raft_server_t* me_, raft_server_t* me_,
const int node, const int node,
...@@ -617,8 +455,6 @@ int raft_votes_is_majority(const int nnodes, const int nvotes) ...@@ -617,8 +455,6 @@ int raft_votes_is_majority(const int nnodes, const int nvotes)
return half + 1 <= nvotes; return half + 1 <= nvotes;
} }
/**
* @param node The node this response was sent by */
int raft_recv_requestvote_response(raft_server_t* me_, int node, int raft_recv_requestvote_response(raft_server_t* me_, int node,
msg_requestvote_response_t* r) msg_requestvote_response_t* r)
{ {
...@@ -664,10 +500,6 @@ int raft_send_entry_response(raft_server_t* me_, ...@@ -664,10 +500,6 @@ int raft_send_entry_response(raft_server_t* me_,
return 0; return 0;
} }
/**
* Receive an ENTRY message.
* Append entry to log
* Send APPENDENTRIES to followers */
int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* cmd) int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* cmd)
{ {
raft_server_private_t* me = (void*)me_; raft_server_private_t* me = (void*)me_;
...@@ -690,8 +522,6 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* cmd) ...@@ -690,8 +522,6 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* cmd)
return 0; return 0;
} }
/**
* @return 0 on error */
int raft_send_requestvote(raft_server_t* me_, int node) int raft_send_requestvote(raft_server_t* me_, int node)
{ {
raft_server_private_t* me = (void*)me_; raft_server_private_t* me = (void*)me_;
...@@ -707,10 +537,6 @@ int raft_send_requestvote(raft_server_t* me_, int node) ...@@ -707,10 +537,6 @@ int raft_send_requestvote(raft_server_t* me_, int node)
return 1; return 1;
} }
/**
* Appends entry using the current term.
* Note: we make the assumption that current term is up-to-date
* @return 0 if unsuccessful */
int raft_append_entry(raft_server_t* me_, raft_entry_t* c) int raft_append_entry(raft_server_t* me_, raft_entry_t* c)
{ {
raft_server_private_t* me = (void*)me_; raft_server_private_t* me = (void*)me_;
...@@ -723,9 +549,6 @@ int raft_append_entry(raft_server_t* me_, raft_entry_t* c) ...@@ -723,9 +549,6 @@ int raft_append_entry(raft_server_t* me_, raft_entry_t* c)
return 0; return 0;
} }
/**
* Apply entry at lastApplied + 1. Entry becomes 'committed'.
* @return 1 if entry committed, 0 otherwise */
int raft_apply_entry(raft_server_t* me_) int raft_apply_entry(raft_server_t* me_)
{ {
raft_server_private_t* me = (void*)me_; raft_server_private_t* me = (void*)me_;
...@@ -778,10 +601,6 @@ void raft_send_appendentries_all(raft_server_t* me_) ...@@ -778,10 +601,6 @@ void raft_send_appendentries_all(raft_server_t* me_)
} }
} }
/**
* Set configuration
* @param nodes Array of nodes, end of array is marked by NULL entry
* @param me_idx Which node is myself */
void raft_set_configuration(raft_server_t* me_, void raft_set_configuration(raft_server_t* me_,
raft_node_configuration_t* nodes, int me_idx) raft_node_configuration_t* nodes, int me_idx)
{ {
...@@ -800,8 +619,6 @@ void raft_set_configuration(raft_server_t* me_, ...@@ -800,8 +619,6 @@ void raft_set_configuration(raft_server_t* me_,
me->nodeid = me_idx; me->nodeid = me_idx;
} }
/**
* @return number of votes this server has received this election */
int raft_get_nvotes_for_me(raft_server_t* me_) int raft_get_nvotes_for_me(raft_server_t* me_)
{ {
raft_server_private_t* me = (void*)me_; raft_server_private_t* me = (void*)me_;
...@@ -820,4 +637,151 @@ int raft_get_nvotes_for_me(raft_server_t* me_) ...@@ -820,4 +637,151 @@ int raft_get_nvotes_for_me(raft_server_t* me_)
return votes; return votes;
} }
void raft_set_election_timeout(raft_server_t* me_, int millisec)
{
raft_server_private_t* me = (void*)me_;
me->election_timeout = millisec;
}
void raft_set_request_timeout(raft_server_t* me_, int millisec)
{
raft_server_private_t* me = (void*)me_;
me->request_timeout = millisec;
}
int raft_get_nodeid(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->nodeid;
}
int raft_get_election_timeout(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->election_timeout;
}
int raft_get_request_timeout(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->request_timeout;
}
void raft_vote(raft_server_t* me_, int node)
{
raft_server_private_t* me = (void*)me_;
me->voted_for = node;
}
int raft_get_num_nodes(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->nnodes;
}
void raft_set_state(raft_server_t* me_, int state)
{
raft_server_private_t* me = (void*)me_;
me->state = state;
}
int raft_get_state(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->state;
}
raft_node_t* raft_get_node(raft_server_t *me_, int nodeid)
{
raft_server_private_t* me = (void*)me_;
if (nodeid < 0 || me->nnodes <= nodeid)
return NULL;
return me->nodes[nodeid];
}
int raft_get_timeout_elapsed(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->timeout_elapsed;
}
int raft_get_log_count(raft_server_t* me_)
{
raft_server_private_t* me = (void*)me_;
return log_count(me->log);
}
int raft_get_voted_for(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->voted_for;
}
void raft_set_current_term(raft_server_t* me_, int term)
{
raft_server_private_t* me = (void*)me_;
me->current_term = term;
}
int raft_get_current_term(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->current_term;
}
void raft_set_current_idx(raft_server_t* me_, int idx)
{
raft_server_private_t* me = (void*)me_;
me->current_idx = idx;
}
int raft_get_current_idx(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->current_idx;
}
int raft_is_follower(raft_server_t* me_)
{
return raft_get_state(me_) == RAFT_STATE_FOLLOWER;
}
int raft_is_leader(raft_server_t* me_)
{
return raft_get_state(me_) == RAFT_STATE_LEADER;
}
int raft_is_candidate(raft_server_t* me_)
{
return raft_get_state(me_) == RAFT_STATE_CANDIDATE;
}
int raft_get_my_id(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->nodeid;
}
void raft_set_commit_idx(raft_server_t* me_, int idx)
{
raft_server_private_t* me = (void*)me_;
me->commit_idx = idx;
}
void raft_set_last_applied_idx(raft_server_t* me_, int idx)
{
raft_server_private_t* me = (void*)me_;
me->last_applied_idx = idx;
}
int raft_get_last_applied_idx(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->last_applied_idx;
}
int raft_get_commit_idx(raft_server_t* me_)
{
return ((raft_server_private_t*)me_)->commit_idx;
}
void raft_set_callbacks(raft_server_t* me_,
raft_cbs_t* funcs, void* cb_ctx)
{
raft_server_private_t* me = (void*)me_;
memcpy(&me->cb, funcs, sizeof(raft_cbs_t));
me->cb_ctx = cb_ctx;
}
/*--------------------------------------------------------------79-characters-*/ /*--------------------------------------------------------------79-characters-*/
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