Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Willemt Raft
Commits
be7bcd03
Commit
be7bcd03
authored
Jan 13, 2014
by
willem
Browse files
Removed raft_connection.h
parent
95aba85e
Changes
3
Hide whitespace changes
Inline
Side-by-side
raft.h
View file @
be7bcd03
...
@@ -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
);
raft_connection.h
deleted
100644 → 0
View file @
95aba85e
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
);
raft_server.c
View file @
be7bcd03
...
@@ -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-*/
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment