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
2343e58b
Commit
2343e58b
authored
May 24, 2018
by
Yossi Gottlieb
Committed by
Willem Thiart
Jun 20, 2018
Browse files
Add raft_types.h and better typedefs.
parent
84ac58a4
Changes
12
Hide whitespace changes
Inline
Side-by-side
include/raft.h
View file @
2343e58b
...
@@ -10,6 +10,8 @@
...
@@ -10,6 +10,8 @@
#ifndef RAFT_H_
#ifndef RAFT_H_
#define RAFT_H_
#define RAFT_H_
#include "raft_types.h"
typedef
enum
{
typedef
enum
{
RAFT_ERR_NOT_LEADER
=-
2
,
RAFT_ERR_NOT_LEADER
=-
2
,
RAFT_ERR_ONE_VOTING_CHANGE_ONLY
=-
3
,
RAFT_ERR_ONE_VOTING_CHANGE_ONLY
=-
3
,
...
@@ -87,10 +89,10 @@ typedef struct
...
@@ -87,10 +89,10 @@ typedef struct
typedef
struct
typedef
struct
{
{
/** the entry's term at the point it was created */
/** the entry's term at the point it was created */
unsigned
in
t
term
;
raft_term_
t
term
;
/** the entry's unique ID */
/** the entry's unique ID */
unsigned
in
t
id
;
raft_entry_id_
t
id
;
/** type of entry */
/** type of entry */
int
type
;
int
type
;
...
@@ -108,13 +110,13 @@ typedef raft_entry_t msg_entry_t;
...
@@ -108,13 +110,13 @@ typedef raft_entry_t msg_entry_t;
typedef
struct
typedef
struct
{
{
/** the entry's unique ID */
/** the entry's unique ID */
unsigned
in
t
id
;
raft_entry_id_
t
id
;
/** the entry's term */
/** the entry's term */
in
t
term
;
raft_term_
t
term
;
/** the entry's index */
/** the entry's index */
in
t
idx
;
raft_index_
t
idx
;
}
msg_entry_response_t
;
}
msg_entry_response_t
;
/** Vote request message.
/** Vote request message.
...
@@ -123,16 +125,16 @@ typedef struct
...
@@ -123,16 +125,16 @@ typedef struct
typedef
struct
typedef
struct
{
{
/** currentTerm, to force other leader/candidate to step down */
/** currentTerm, to force other leader/candidate to step down */
in
t
term
;
raft_term_
t
term
;
/** candidate requesting vote */
/** candidate requesting vote */
in
t
candidate_id
;
raft_node_id_
t
candidate_id
;
/** index of candidate's last log entry */
/** index of candidate's last log entry */
in
t
last_log_idx
;
raft_index_
t
last_log_idx
;
/** term of candidate's last log entry */
/** term of candidate's last log entry */
in
t
last_log_term
;
raft_term_
t
last_log_term
;
}
msg_requestvote_t
;
}
msg_requestvote_t
;
/** Vote request response message.
/** Vote request response message.
...
@@ -140,7 +142,7 @@ typedef struct
...
@@ -140,7 +142,7 @@ typedef struct
typedef
struct
typedef
struct
{
{
/** currentTerm, for candidate to update itself */
/** currentTerm, for candidate to update itself */
in
t
term
;
raft_term_
t
term
;
/** true means candidate received vote */
/** true means candidate received vote */
int
vote_granted
;
int
vote_granted
;
...
@@ -153,19 +155,19 @@ typedef struct
...
@@ -153,19 +155,19 @@ typedef struct
typedef
struct
typedef
struct
{
{
/** currentTerm, to force other leader/candidate to step down */
/** currentTerm, to force other leader/candidate to step down */
in
t
term
;
raft_term_
t
term
;
/** the index of the log just before the newest entry for the node who
/** the index of the log just before the newest entry for the node who
* receives this message */
* receives this message */
in
t
prev_log_idx
;
raft_index_
t
prev_log_idx
;
/** the term of the log just before the newest entry for the node who
/** the term of the log just before the newest entry for the node who
* receives this message */
* receives this message */
in
t
prev_log_term
;
raft_term_
t
prev_log_term
;
/** the index of the entry that has been appended to the majority of the
/** the index of the entry that has been appended to the majority of the
* cluster. Entries up to this index will be applied to the FSM */
* cluster. Entries up to this index will be applied to the FSM */
in
t
leader_commit
;
raft_index_
t
leader_commit
;
/** number of entries within this message */
/** number of entries within this message */
int
n_entries
;
int
n_entries
;
...
@@ -180,7 +182,7 @@ typedef struct
...
@@ -180,7 +182,7 @@ typedef struct
typedef
struct
typedef
struct
{
{
/** currentTerm, to force other leader/candidate to step down */
/** currentTerm, to force other leader/candidate to step down */
in
t
term
;
raft_term_
t
term
;
/** true if follower contained entry matching prevLogidx and prevLogTerm */
/** true if follower contained entry matching prevLogidx and prevLogTerm */
int
success
;
int
success
;
...
@@ -191,10 +193,10 @@ typedef struct
...
@@ -191,10 +193,10 @@ typedef struct
/** If success, this is the highest log IDX we've received and appended to
/** If success, this is the highest log IDX we've received and appended to
* our log; otherwise, this is the our currentIndex */
* our log; otherwise, this is the our currentIndex */
in
t
current_idx
;
raft_index_
t
current_idx
;
/** The first idx that we received within the appendentries message */
/** The first idx that we received within the appendentries message */
in
t
first_idx
;
raft_index_
t
first_idx
;
}
msg_appendentries_response_t
;
}
msg_appendentries_response_t
;
typedef
void
*
raft_server_t
;
typedef
void
*
raft_server_t
;
...
@@ -289,7 +291,7 @@ typedef int (
...
@@ -289,7 +291,7 @@ typedef int (
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
in
t
vote
raft_node_id_
t
vote
);
);
/** Callback for saving current term (and nil vote) to disk.
/** Callback for saving current term (and nil vote) to disk.
...
@@ -305,8 +307,8 @@ typedef int (
...
@@ -305,8 +307,8 @@ typedef int (
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
in
t
term
,
raft_term_
t
term
,
in
t
vote
raft_node_id_
t
vote
);
);
/** Callback for saving log entry changes.
/** Callback for saving log entry changes.
...
@@ -335,7 +337,7 @@ typedef int (
...
@@ -335,7 +337,7 @@ typedef int (
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
raft_entry_t
*
entry
,
raft_entry_t
*
entry
,
in
t
entry_idx
raft_index_
t
entry_idx
);
);
/** Callback for being notified of membership changes.
/** Callback for being notified of membership changes.
...
@@ -464,7 +466,7 @@ void raft_set_callbacks(raft_server_t* me, raft_cbs_t* funcs, void* user_data);
...
@@ -464,7 +466,7 @@ void raft_set_callbacks(raft_server_t* me, raft_cbs_t* funcs, void* user_data);
* @return
* @return
* node if it was successfully added;
* node if it was successfully added;
* NULL if the node already exists */
* NULL if the node already exists */
raft_node_t
*
raft_add_node
(
raft_server_t
*
me
,
void
*
user_data
,
in
t
id
,
int
is_self
);
raft_node_t
*
raft_add_node
(
raft_server_t
*
me
,
void
*
user_data
,
raft_node_id_
t
id
,
int
is_self
);
#define raft_add_peer raft_add_node
#define raft_add_peer raft_add_node
...
@@ -474,7 +476,7 @@ raft_node_t* raft_add_node(raft_server_t* me, void* user_data, int id, int is_se
...
@@ -474,7 +476,7 @@ raft_node_t* raft_add_node(raft_server_t* me, void* user_data, int id, int is_se
* @return
* @return
* node if it was successfully added;
* node if it was successfully added;
* NULL if the node already exists */
* NULL if the node already exists */
raft_node_t
*
raft_add_non_voting_node
(
raft_server_t
*
me_
,
void
*
udata
,
in
t
id
,
int
is_self
);
raft_node_t
*
raft_add_non_voting_node
(
raft_server_t
*
me_
,
void
*
udata
,
raft_node_id_
t
id
,
int
is_self
);
/** Remove node.
/** Remove node.
* @param node The node to be removed. */
* @param node The node to be removed. */
...
@@ -610,19 +612,19 @@ int raft_get_num_voting_nodes(raft_server_t* me_);
...
@@ -610,19 +612,19 @@ int raft_get_num_voting_nodes(raft_server_t* me_);
/**
/**
* @return number of items within log */
* @return number of items within log */
in
t
raft_get_log_count
(
raft_server_t
*
me
);
raft_index_
t
raft_get_log_count
(
raft_server_t
*
me
);
/**
/**
* @return current term */
* @return current term */
in
t
raft_get_current_term
(
raft_server_t
*
me
);
raft_term_
t
raft_get_current_term
(
raft_server_t
*
me
);
/**
/**
* @return current log index */
* @return current log index */
in
t
raft_get_current_idx
(
raft_server_t
*
me
);
raft_index_
t
raft_get_current_idx
(
raft_server_t
*
me
);
/**
/**
* @return commit index */
* @return commit index */
in
t
raft_get_commit_idx
(
raft_server_t
*
me_
);
raft_index_
t
raft_get_commit_idx
(
raft_server_t
*
me_
);
/**
/**
* @return 1 if follower; 0 otherwise */
* @return 1 if follower; 0 otherwise */
...
@@ -646,15 +648,15 @@ int raft_get_request_timeout(raft_server_t* me);
...
@@ -646,15 +648,15 @@ int raft_get_request_timeout(raft_server_t* me);
/**
/**
* @return index of last applied entry */
* @return index of last applied entry */
in
t
raft_get_last_applied_idx
(
raft_server_t
*
me
);
raft_index_
t
raft_get_last_applied_idx
(
raft_server_t
*
me
);
/**
/**
* @return the node's next index */
* @return the node's next index */
in
t
raft_node_get_next_idx
(
raft_node_t
*
node
);
raft_index_
t
raft_node_get_next_idx
(
raft_node_t
*
node
);
/**
/**
* @return this node's user data */
* @return this node's user data */
in
t
raft_node_get_match_idx
(
raft_node_t
*
me
);
raft_index_
t
raft_node_get_match_idx
(
raft_node_t
*
me
);
/**
/**
* @return this node's user data */
* @return this node's user data */
...
@@ -667,18 +669,18 @@ void raft_node_set_udata(raft_node_t* me, void* user_data);
...
@@ -667,18 +669,18 @@ void raft_node_set_udata(raft_node_t* me, void* user_data);
/**
/**
* @param[in] idx The entry's index
* @param[in] idx The entry's index
* @return entry from index */
* @return entry from index */
raft_entry_t
*
raft_get_entry_from_idx
(
raft_server_t
*
me
,
in
t
idx
);
raft_entry_t
*
raft_get_entry_from_idx
(
raft_server_t
*
me
,
raft_index_
t
idx
);
/**
/**
* @param[in] node The node's ID
* @param[in] node The node's ID
* @return node pointed to by node ID */
* @return node pointed to by node ID */
raft_node_t
*
raft_get_node
(
raft_server_t
*
me_
,
const
in
t
id
);
raft_node_t
*
raft_get_node
(
raft_server_t
*
me_
,
const
raft_node_id_
t
id
);
/**
/**
* Used for iterating through nodes
* Used for iterating through nodes
* @param[in] node The node's idx
* @param[in] node The node's idx
* @return node pointed to by node idx */
* @return node pointed to by node idx */
raft_node_t
*
raft_get_node_from_idx
(
raft_server_t
*
me_
,
const
in
t
idx
);
raft_node_t
*
raft_get_node_from_idx
(
raft_server_t
*
me_
,
const
raft_index_
t
idx
);
/**
/**
* @return number of votes this server has received this election */
* @return number of votes this server has received this election */
...
@@ -691,7 +693,7 @@ int raft_get_voted_for(raft_server_t* me);
...
@@ -691,7 +693,7 @@ int raft_get_voted_for(raft_server_t* me);
/** Get what this node thinks the node ID of the leader is.
/** Get what this node thinks the node ID of the leader is.
* @return node of what this node thinks is the valid leader;
* @return node of what this node thinks is the valid leader;
* -1 if the leader is unknown */
* -1 if the leader is unknown */
in
t
raft_get_current_leader
(
raft_server_t
*
me
);
raft_node_id_
t
raft_get_current_leader
(
raft_server_t
*
me
);
/** Get what this node thinks the node of the leader is.
/** Get what this node thinks the node of the leader is.
* @return node of what this node thinks is the valid leader;
* @return node of what this node thinks is the valid leader;
...
@@ -714,19 +716,19 @@ int raft_vote(raft_server_t* me_, raft_node_t* node);
...
@@ -714,19 +716,19 @@ int raft_vote(raft_server_t* me_, raft_node_t* node);
* @param[in] nodeid The server to vote for by nodeid
* @param[in] nodeid The server to vote for by nodeid
* @return
* @return
* 0 on success */
* 0 on success */
int
raft_vote_for_nodeid
(
raft_server_t
*
me_
,
const
in
t
nodeid
);
int
raft_vote_for_nodeid
(
raft_server_t
*
me_
,
const
raft_node_id_
t
nodeid
);
/** Set the current term.
/** Set the current term.
* This should be used to reload persistent state, ie. the current_term field.
* This should be used to reload persistent state, ie. the current_term field.
* @param[in] term The new current term
* @param[in] term The new current term
* @return
* @return
* 0 on success */
* 0 on success */
int
raft_set_current_term
(
raft_server_t
*
me
,
const
in
t
term
);
int
raft_set_current_term
(
raft_server_t
*
me
,
const
raft_term_
t
term
);
/** Set the commit idx.
/** Set the commit idx.
* This should be used to reload persistent state, ie. the commit_idx field.
* This should be used to reload persistent state, ie. the commit_idx field.
* @param[in] commit_idx The new commit index. */
* @param[in] commit_idx The new commit index. */
void
raft_set_commit_idx
(
raft_server_t
*
me
,
in
t
commit_idx
);
void
raft_set_commit_idx
(
raft_server_t
*
me
,
raft_index_
t
commit_idx
);
/** Add an entry to the server's log.
/** Add an entry to the server's log.
* This should be used to reload persistent state, ie. the commit log.
* This should be used to reload persistent state, ie. the commit log.
...
@@ -744,7 +746,7 @@ int raft_msg_entry_response_committed(raft_server_t* me_,
...
@@ -744,7 +746,7 @@ int raft_msg_entry_response_committed(raft_server_t* me_,
/** Get node's ID.
/** Get node's ID.
* @return ID of node */
* @return ID of node */
in
t
raft_node_get_id
(
raft_node_t
*
me_
);
raft_node_id_
t
raft_node_get_id
(
raft_node_t
*
me_
);
/** Tell if we are a leader, candidate or follower.
/** Tell if we are a leader, candidate or follower.
* @return get state of type raft_state_e. */
* @return get state of type raft_state_e. */
...
@@ -752,7 +754,7 @@ int raft_get_state(raft_server_t* me_);
...
@@ -752,7 +754,7 @@ int raft_get_state(raft_server_t* me_);
/** Get the most recent log's term
/** Get the most recent log's term
* @return the last log term */
* @return the last log term */
in
t
raft_get_last_log_term
(
raft_server_t
*
me_
);
raft_term_
t
raft_get_last_log_term
(
raft_server_t
*
me_
);
/** Turn a node into a voting node.
/** Turn a node into a voting node.
* Voting nodes can take part in elections and in-regards to committing entries,
* Voting nodes can take part in elections and in-regards to committing entries,
...
@@ -821,7 +823,7 @@ int raft_end_snapshot(raft_server_t *me_);
...
@@ -821,7 +823,7 @@ int raft_end_snapshot(raft_server_t *me_);
/** Get the entry index of the entry that was snapshotted
/** Get the entry index of the entry that was snapshotted
**/
**/
in
t
raft_get_snapshot_entry_idx
(
raft_server_t
*
me_
);
raft_index_
t
raft_get_snapshot_entry_idx
(
raft_server_t
*
me_
);
/** Check is a snapshot is in progress
/** Check is a snapshot is in progress
**/
**/
...
@@ -837,7 +839,7 @@ int raft_poll_entry(raft_server_t* me_, raft_entry_t **ety);
...
@@ -837,7 +839,7 @@ int raft_poll_entry(raft_server_t* me_, raft_entry_t **ety);
**/
**/
raft_entry_t
*
raft_get_last_applied_entry
(
raft_server_t
*
me_
);
raft_entry_t
*
raft_get_last_applied_entry
(
raft_server_t
*
me_
);
in
t
raft_get_first_entry_idx
(
raft_server_t
*
me_
);
raft_index_
t
raft_get_first_entry_idx
(
raft_server_t
*
me_
);
/** Start loading snapshot
/** Start loading snapshot
*
*
...
@@ -856,8 +858,8 @@ int raft_get_first_entry_idx(raft_server_t* me_);
...
@@ -856,8 +858,8 @@ int raft_get_first_entry_idx(raft_server_t* me_);
* RAFT_ERR_SNAPSHOT_ALREADY_LOADED
* RAFT_ERR_SNAPSHOT_ALREADY_LOADED
**/
**/
int
raft_begin_load_snapshot
(
raft_server_t
*
me_
,
int
raft_begin_load_snapshot
(
raft_server_t
*
me_
,
in
t
last_included_term
,
raft_term_
t
last_included_term
,
in
t
last_included_index
);
raft_index_
t
last_included_index
);
/** Stop loading snapshot.
/** Stop loading snapshot.
*
*
...
@@ -867,11 +869,11 @@ int raft_begin_load_snapshot(raft_server_t *me_,
...
@@ -867,11 +869,11 @@ int raft_begin_load_snapshot(raft_server_t *me_,
**/
**/
int
raft_end_load_snapshot
(
raft_server_t
*
me_
);
int
raft_end_load_snapshot
(
raft_server_t
*
me_
);
in
t
raft_get_snapshot_last_idx
(
raft_server_t
*
me_
);
raft_index_
t
raft_get_snapshot_last_idx
(
raft_server_t
*
me_
);
in
t
raft_get_snapshot_last_term
(
raft_server_t
*
me_
);
raft_term_
t
raft_get_snapshot_last_term
(
raft_server_t
*
me_
);
void
raft_set_snapshot_metadata
(
raft_server_t
*
me_
,
int
term
,
in
t
idx
);
void
raft_set_snapshot_metadata
(
raft_server_t
*
me_
,
raft_term_t
term
,
raft_index_
t
idx
);
/** Check if a node is active.
/** Check if a node is active.
* Active nodes could become voting nodes.
* Active nodes could become voting nodes.
...
...
include/raft_log.h
View file @
2343e58b
#ifndef RAFT_LOG_H_
#ifndef RAFT_LOG_H_
#define RAFT_LOG_H_
#define RAFT_LOG_H_
#include "raft_types.h"
typedef
void
*
log_t
;
typedef
void
*
log_t
;
log_t
*
log_new
();
log_t
*
log_new
(
void
);
log_t
*
log_alloc
(
in
t
initial_size
);
log_t
*
log_alloc
(
raft_index_
t
initial_size
);
void
log_set_callbacks
(
log_t
*
me_
,
raft_cbs_t
*
funcs
,
void
*
raft
);
void
log_set_callbacks
(
log_t
*
me_
,
raft_cbs_t
*
funcs
,
void
*
raft
);
...
@@ -22,11 +24,11 @@ int log_append_entry(log_t* me_, raft_entry_t* c);
...
@@ -22,11 +24,11 @@ int log_append_entry(log_t* me_, raft_entry_t* c);
/**
/**
* @return number of entries held within log */
* @return number of entries held within log */
in
t
log_count
(
log_t
*
me_
);
raft_index_
t
log_count
(
log_t
*
me_
);
/**
/**
* Delete all logs from this log onwards */
* Delete all logs from this log onwards */
int
log_delete
(
log_t
*
me_
,
in
t
idx
);
int
log_delete
(
log_t
*
me_
,
raft_index_
t
idx
);
/**
/**
* Empty the queue. */
* Empty the queue. */
...
@@ -39,18 +41,18 @@ int log_poll(log_t * me_, void** etyp);
...
@@ -39,18 +41,18 @@ int log_poll(log_t * me_, void** etyp);
/** Get an array of entries from this index onwards.
/** Get an array of entries from this index onwards.
* This is used for batching.
* This is used for batching.
*/
*/
raft_entry_t
*
log_get_from_idx
(
log_t
*
me_
,
in
t
idx
,
int
*
n_etys
);
raft_entry_t
*
log_get_from_idx
(
log_t
*
me_
,
raft_index_
t
idx
,
int
*
n_etys
);
raft_entry_t
*
log_get_at_idx
(
log_t
*
me_
,
in
t
idx
);
raft_entry_t
*
log_get_at_idx
(
log_t
*
me_
,
raft_index_
t
idx
);
/**
/**
* @return youngest entry */
* @return youngest entry */
raft_entry_t
*
log_peektail
(
log_t
*
me_
);
raft_entry_t
*
log_peektail
(
log_t
*
me_
);
in
t
log_get_current_idx
(
log_t
*
me_
);
raft_index_
t
log_get_current_idx
(
log_t
*
me_
);
int
log_load_from_snapshot
(
log_t
*
me_
,
int
idx
,
in
t
term
);
int
log_load_from_snapshot
(
log_t
*
me_
,
raft_index_t
idx
,
raft_term_
t
term
);
in
t
log_get_base
(
log_t
*
me_
);
raft_index_
t
log_get_base
(
log_t
*
me_
);
#endif
/* RAFT_LOG_H_ */
#endif
/* RAFT_LOG_H_ */
include/raft_private.h
View file @
2343e58b
...
@@ -10,6 +10,8 @@
...
@@ -10,6 +10,8 @@
#ifndef RAFT_PRIVATE_H_
#ifndef RAFT_PRIVATE_H_
#define RAFT_PRIVATE_H_
#define RAFT_PRIVATE_H_
#include "raft_types.h"
enum
{
enum
{
RAFT_NODE_STATUS_DISCONNECTED
,
RAFT_NODE_STATUS_DISCONNECTED
,
RAFT_NODE_STATUS_CONNECTED
,
RAFT_NODE_STATUS_CONNECTED
,
...
@@ -22,11 +24,11 @@ typedef struct {
...
@@ -22,11 +24,11 @@ typedef struct {
/* the server's best guess of what the current term is
/* the server's best guess of what the current term is
* starts at zero */
* starts at zero */
in
t
current_term
;
raft_term_
t
current_term
;
/* The candidate the server voted for in its current term,
/* The candidate the server voted for in its current term,
* or Nil if it hasn't voted for any. */
* or Nil if it hasn't voted for any. */
in
t
voted_for
;
raft_node_id_
t
voted_for
;
/* the log which is replicated */
/* the log which is replicated */
void
*
log
;
void
*
log
;
...
@@ -34,10 +36,10 @@ typedef struct {
...
@@ -34,10 +36,10 @@ typedef struct {
/* Volatile state: */
/* Volatile state: */
/* idx of highest log entry known to be committed */
/* idx of highest log entry known to be committed */
in
t
commit_idx
;
raft_index_
t
commit_idx
;
/* idx of highest log entry applied to state machine */
/* idx of highest log entry applied to state machine */
in
t
last_applied_idx
;
raft_index_
t
last_applied_idx
;
/* follower/leader/candidate indicator */
/* follower/leader/candidate indicator */
int
state
;
int
state
;
...
@@ -64,7 +66,7 @@ typedef struct {
...
@@ -64,7 +66,7 @@ typedef struct {
raft_node_t
*
node
;
raft_node_t
*
node
;
/* the log which has a voting cfg change, otherwise -1 */
/* the log which has a voting cfg change, otherwise -1 */
in
t
voting_cfg_change_log_idx
;
raft_index_
t
voting_cfg_change_log_idx
;
/* Our membership with the cluster is confirmed (ie. configuration log was
/* Our membership with the cluster is confirmed (ie. configuration log was
* committed) */
* committed) */
...
@@ -73,8 +75,8 @@ typedef struct {
...
@@ -73,8 +75,8 @@ typedef struct {
int
snapshot_in_progress
;
int
snapshot_in_progress
;
/* Last compacted snapshot */
/* Last compacted snapshot */
in
t
snapshot_last_idx
;
raft_index_
t
snapshot_last_idx
;
in
t
snapshot_last_term
;
raft_term_
t
snapshot_last_term
;
}
raft_server_private_t
;
}
raft_server_private_t
;
int
raft_election_start
(
raft_server_t
*
me
);
int
raft_election_start
(
raft_server_t
*
me
);
...
@@ -102,21 +104,21 @@ int raft_apply_entry(raft_server_t* me_);
...
@@ -102,21 +104,21 @@ int raft_apply_entry(raft_server_t* me_);
* @return 0 if unsuccessful */
* @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
);
void
raft_set_last_applied_idx
(
raft_server_t
*
me
,
in
t
idx
);
void
raft_set_last_applied_idx
(
raft_server_t
*
me
,
raft_index_
t
idx
);
void
raft_set_state
(
raft_server_t
*
me_
,
int
state
);
void
raft_set_state
(
raft_server_t
*
me_
,
int
state
);
int
raft_get_state
(
raft_server_t
*
me_
);
int
raft_get_state
(
raft_server_t
*
me_
);
raft_node_t
*
raft_node_new
(
void
*
udata
,
in
t
id
);
raft_node_t
*
raft_node_new
(
void
*
udata
,
raft_node_id_
t
id
);
void
raft_node_free
(
raft_node_t
*
me_
);
void
raft_node_free
(
raft_node_t
*
me_
);
void
raft_node_set_next_idx
(
raft_node_t
*
node
,
in
t
nextIdx
);
void
raft_node_set_next_idx
(
raft_node_t
*
node
,
raft_index_
t
nextIdx
);
void
raft_node_set_match_idx
(
raft_node_t
*
node
,
in
t
matchIdx
);
void
raft_node_set_match_idx
(
raft_node_t
*
node
,
raft_index_
t
matchIdx
);
in
t
raft_node_get_match_idx
(
raft_node_t
*
me_
);
raft_index_
t
raft_node_get_match_idx
(
raft_node_t
*
me_
);
void
raft_node_vote_for_me
(
raft_node_t
*
me_
,
const
int
vote
);
void
raft_node_vote_for_me
(
raft_node_t
*
me_
,
const
int
vote
);
...
@@ -126,11 +128,11 @@ void raft_node_set_has_sufficient_logs(raft_node_t* me_);
...
@@ -126,11 +128,11 @@ void raft_node_set_has_sufficient_logs(raft_node_t* me_);
int
raft_votes_is_majority
(
const
int
nnodes
,
const
int
nvotes
);
int
raft_votes_is_majority
(
const
int
nnodes
,
const
int
nvotes
);
void
raft_offer_log
(
raft_server_t
*
me_
,
raft_entry_t
*
ety
,
const
in
t
idx
);
void
raft_offer_log
(
raft_server_t
*
me_
,
raft_entry_t
*
ety
,
const
raft_index_
t
idx
);
void
raft_pop_log
(
raft_server_t
*
me_
,
raft_entry_t
*
ety
,
const
in
t
idx
);
void
raft_pop_log
(
raft_server_t
*
me_
,
raft_entry_t
*
ety
,
const
raft_index_
t
idx
);
in
t
raft_get_num_snapshottable_logs
(
raft_server_t
*
me_
);
raft_index_
t
raft_get_num_snapshottable_logs
(
raft_server_t
*
me_
);
int
raft_node_is_active
(
raft_node_t
*
me_
);
int
raft_node_is_active
(
raft_node_t
*
me_
);
...
...
include/raft_types.h
0 → 100644
View file @
2343e58b
#ifndef RAFT_DEFS_H_
#define RAFT_DEFS_H_
/**
* Unique entry ids are mostly used for debugging and nothing else,
* so there is little harm if they collide.
*/
typedef
int
raft_entry_id_t
;
/**
* Monotonic term counter.
*/
typedef
long
int
raft_term_t
;
/**
* Monotonic log entry index.
*
* This is also used to as an entry count size type.
*/
typedef
long
int
raft_index_t
;
/**
* Unique node identifier.
*/
typedef
int
raft_node_id_t
;
#endif
/* RAFT_DEFS_H_ */
src/raft_log.c
View file @
2343e58b
...
@@ -22,16 +22,16 @@
...
@@ -22,16 +22,16 @@
typedef
struct
typedef
struct
{
{
/* size of array */
/* size of array */
in
t
size
;
raft_index_
t
size
;
/* the amount of elements in the array */
/* the amount of elements in the array */
in
t
count
;
raft_index_
t
count
;
/* position of the queue */
/* position of the queue */
in
t
front
,
back
;
raft_index_
t
front
,
back
;
/* we compact the log, and thus need to increment the Base Log Index */
/* we compact the log, and thus need to increment the Base Log Index */
in
t
base
;
raft_index_
t
base
;
raft_entry_t
*
entries
;
raft_entry_t
*
entries
;
...
@@ -40,7 +40,7 @@ typedef struct
...
@@ -40,7 +40,7 @@ typedef struct
void
*
raft
;
void
*
raft
;
}
log_private_t
;
}
log_private_t
;
static
int
mod
(
int
a
,
in
t
b
)
static
int
mod
(
raft_index_t
a
,
raft_index_
t
b
)
{
{
int
r
=
a
%
b
;
int
r
=
a
%
b
;
return
r
<
0
?
r
+
b
:
r
;
return
r
<
0
?
r
+
b
:
r
;
...
@@ -48,7 +48,7 @@ static int mod(int a, int b)
...
@@ -48,7 +48,7 @@ static int mod(int a, int b)
static
int
__ensurecapacity
(
log_private_t
*
me
)
static
int
__ensurecapacity
(
log_private_t
*
me
)
{
{
in
t
i
,
j
;
raft_index_
t
i
,
j
;
raft_entry_t
*
temp
;
raft_entry_t
*
temp
;
if
(
me
->
count
<
me
->
size
)
if
(
me
->
count
<
me
->
size
)
...
@@ -75,7 +75,7 @@ static int __ensurecapacity(log_private_t * me)
...
@@ -75,7 +75,7 @@ static int __ensurecapacity(log_private_t * me)
return
0
;
return
0
;
}
}
int
log_load_from_snapshot
(
log_t
*
me_
,
int
idx
,
in
t
term
)
int
log_load_from_snapshot
(
log_t
*
me_
,
raft_index_t
idx
,
raft_term_
t
term
)
{
{
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
...
@@ -85,7 +85,7 @@ int log_load_from_snapshot(log_t *me_, int idx, int term)
...
@@ -85,7 +85,7 @@ int log_load_from_snapshot(log_t *me_, int idx, int term)
return
0
;
return
0
;
}
}
log_t
*
log_alloc
(
in
t
initial_size
)
log_t
*
log_alloc
(
raft_index_
t
initial_size
)
{
{
log_private_t
*
me
=
(
log_private_t
*
)
__raft_calloc
(
1
,
sizeof
(
log_private_t
));
log_private_t
*
me
=
(
log_private_t
*
)
__raft_calloc
(
1
,
sizeof
(
log_private_t
));
if
(
!
me
)
if
(
!
me
)
...
@@ -126,7 +126,7 @@ void log_clear(log_t* me_)
...
@@ -126,7 +126,7 @@ void log_clear(log_t* me_)
int
log_append_entry
(
log_t
*
me_
,
raft_entry_t
*
ety
)
int
log_append_entry
(
log_t
*
me_
,
raft_entry_t
*
ety
)
{
{
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
in
t
idx
=
me
->
base
+
me
->
count
+
1
;
raft_index_
t
idx
=
me
->
base
+
me
->
count
+
1
;
int
e
;
int
e
;
e
=
__ensurecapacity
(
me
);
e
=
__ensurecapacity
(
me
);
...
@@ -151,10 +151,10 @@ int log_append_entry(log_t* me_, raft_entry_t* ety)
...
@@ -151,10 +151,10 @@ int log_append_entry(log_t* me_, raft_entry_t* ety)
return
0
;
return
0
;
}
}
raft_entry_t
*
log_get_from_idx
(
log_t
*
me_
,
in
t
idx
,
int
*
n_etys
)
raft_entry_t
*
log_get_from_idx
(
log_t
*
me_
,
raft_index_
t
idx
,
int
*
n_etys
)
{
{
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
in
t
i
;
raft_index_
t
i
;
assert
(
0
<=
idx
-
1
);
assert
(
0
<=
idx
-
1
);
...
@@ -180,10 +180,10 @@ raft_entry_t* log_get_from_idx(log_t* me_, int idx, int *n_etys)
...
@@ -180,10 +180,10 @@ raft_entry_t* log_get_from_idx(log_t* me_, int idx, int *n_etys)
return
&
me
->
entries
[
i
];
return
&
me
->
entries
[
i
];
}
}
raft_entry_t
*
log_get_at_idx
(
log_t
*
me_
,
in
t
idx
)
raft_entry_t
*
log_get_at_idx
(
log_t
*
me_
,
raft_index_
t
idx
)
{
{
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
in
t
i
;
raft_index_
t
i
;
if
(
idx
==
0
)
if
(
idx
==
0
)
return
NULL
;
return
NULL
;
...
@@ -198,12 +198,12 @@ raft_entry_t* log_get_at_idx(log_t* me_, int idx)
...
@@ -198,12 +198,12 @@ raft_entry_t* log_get_at_idx(log_t* me_, int idx)
return
&
me
->
entries
[
i
];
return
&
me
->
entries
[
i
];
}
}
in
t
log_count
(
log_t
*
me_
)
raft_index_
t
log_count
(
log_t
*
me_
)
{
{
return
((
log_private_t
*
)
me_
)
->
count
;
return
((
log_private_t
*
)
me_
)
->
count
;
}
}
int
log_delete
(
log_t
*
me_
,
in
t
idx
)
int
log_delete
(
log_t
*
me_
,
raft_index_
t
idx
)
{
{
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
...
@@ -215,8 +215,8 @@ int log_delete(log_t* me_, int idx)
...
@@ -215,8 +215,8 @@ int log_delete(log_t* me_, int idx)
for
(;
idx
<=
me
->
base
+
me
->
count
&&
me
->
count
;)
for
(;
idx
<=
me
->
base
+
me
->
count
&&
me
->
count
;)
{
{
in
t
idx_tmp
=
me
->
base
+
me
->
count
;
raft_index_
t
idx_tmp
=
me
->
base
+
me
->
count
;
in
t
back
=
mod
(
me
->
back
-
1
,
me
->
size
);
raft_index_
t
back
=
mod
(
me
->
back
-
1
,
me
->
size
);
if
(
me
->
cb
&&
me
->
cb
->
log_pop
)
if
(
me
->
cb
&&
me
->
cb
->
log_pop
)
{
{
...
@@ -235,7 +235,7 @@ int log_delete(log_t* me_, int idx)
...
@@ -235,7 +235,7 @@ int log_delete(log_t* me_, int idx)
int
log_poll
(
log_t
*
me_
,
void
**
etyp
)
int
log_poll
(
log_t
*
me_
,
void
**
etyp
)
{
{
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
in
t
idx
=
me
->
base
+
1
;
raft_index_
t
idx
=
me
->
base
+
1
;
if
(
0
==
me
->
count
)
if
(
0
==
me
->
count
)
return
-
1
;
return
-
1
;
...
@@ -287,13 +287,13 @@ void log_free(log_t * me_)
...
@@ -287,13 +287,13 @@ void log_free(log_t * me_)
__raft_free
(
me
);
__raft_free
(
me
);
}
}
in
t
log_get_current_idx
(
log_t
*
me_
)
raft_index_
t
log_get_current_idx
(
log_t
*
me_
)
{
{
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
return
log_count
(
me_
)
+
me
->
base
;
return
log_count
(
me_
)
+
me
->
base
;
}
}
in
t
log_get_base
(
log_t
*
me_
)
raft_index_
t
log_get_base
(
log_t
*
me_
)
{
{
return
((
log_private_t
*
)
me_
)
->
base
;
return
((
log_private_t
*
)
me_
)
->
base
;
}
}
src/raft_node.c
View file @
2343e58b
...
@@ -28,15 +28,15 @@ typedef struct
...
@@ -28,15 +28,15 @@ typedef struct
{
{
void
*
udata
;
void
*
udata
;
in
t
next_idx
;
raft_index_
t
next_idx
;
in
t
match_idx
;
raft_index_
t
match_idx
;
int
flags
;
int
flags
;
in
t
id
;
raft_node_id_
t
id
;
}
raft_node_private_t
;
}
raft_node_private_t
;
raft_node_t
*
raft_node_new
(
void
*
udata
,
in
t
id
)
raft_node_t
*
raft_node_new
(
void
*
udata
,
raft_node_id_
t
id
)
{
{
raft_node_private_t
*
me
;
raft_node_private_t
*
me
;
me
=
(
raft_node_private_t
*
)
__raft_calloc
(
1
,
sizeof
(
raft_node_private_t
));
me
=
(
raft_node_private_t
*
)
__raft_calloc
(
1
,
sizeof
(
raft_node_private_t
));
...
@@ -55,26 +55,26 @@ void raft_node_free(raft_node_t* me_)
...
@@ -55,26 +55,26 @@ void raft_node_free(raft_node_t* me_)
__raft_free
(
me_
);
__raft_free
(
me_
);
}
}
in
t
raft_node_get_next_idx
(
raft_node_t
*
me_
)
raft_index_
t
raft_node_get_next_idx
(
raft_node_t
*
me_
)
{
{
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
return
me
->
next_idx
;
return
me
->
next_idx
;
}
}
void
raft_node_set_next_idx
(
raft_node_t
*
me_
,
in
t
nextIdx
)
void
raft_node_set_next_idx
(
raft_node_t
*
me_
,
raft_index_
t
nextIdx
)
{
{
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
/* log index begins at 1 */
/* log index begins at 1 */
me
->
next_idx
=
nextIdx
<
1
?
1
:
nextIdx
;
me
->
next_idx
=
nextIdx
<
1
?
1
:
nextIdx
;
}
}
in
t
raft_node_get_match_idx
(
raft_node_t
*
me_
)
raft_index_
t
raft_node_get_match_idx
(
raft_node_t
*
me_
)
{
{
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
return
me
->
match_idx
;
return
me
->
match_idx
;
}
}
void
raft_node_set_match_idx
(
raft_node_t
*
me_
,
in
t
matchIdx
)
void
raft_node_set_match_idx
(
raft_node_t
*
me_
,
raft_index_
t
matchIdx
)
{
{
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
me
->
match_idx
=
matchIdx
;
me
->
match_idx
=
matchIdx
;
...
@@ -170,7 +170,7 @@ int raft_node_is_voting_committed(raft_node_t* me_)
...
@@ -170,7 +170,7 @@ int raft_node_is_voting_committed(raft_node_t* me_)
return
(
me
->
flags
&
RAFT_NODE_VOTING_COMMITTED
)
!=
0
;
return
(
me
->
flags
&
RAFT_NODE_VOTING_COMMITTED
)
!=
0
;
}
}
in
t
raft_node_get_id
(
raft_node_t
*
me_
)
raft_node_id_
t
raft_node_get_id
(
raft_node_t
*
me_
)
{
{
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
return
me
->
id
;
return
me
->
id
;
...
...
src/raft_server.c
View file @
2343e58b
...
@@ -128,7 +128,7 @@ void raft_clear(raft_server_t* me_)
...
@@ -128,7 +128,7 @@ void raft_clear(raft_server_t* me_)
log_clear
(
me
->
log
);
log_clear
(
me
->
log
);
}
}
int
raft_delete_entry_from_idx
(
raft_server_t
*
me_
,
in
t
idx
)
int
raft_delete_entry_from_idx
(
raft_server_t
*
me_
,
raft_index_
t
idx
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
...
@@ -258,7 +258,7 @@ int raft_periodic(raft_server_t* me_, int msec_since_last_period)
...
@@ -258,7 +258,7 @@ int raft_periodic(raft_server_t* me_, int msec_since_last_period)
return
0
;
return
0
;
}
}
raft_entry_t
*
raft_get_entry_from_idx
(
raft_server_t
*
me_
,
in
t
etyidx
)
raft_entry_t
*
raft_get_entry_from_idx
(
raft_server_t
*
me_
,
raft_index_
t
etyidx
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
return
log_get_at_idx
(
me
->
log
,
etyidx
);
return
log_get_at_idx
(
me
->
log
,
etyidx
);
...
@@ -302,13 +302,13 @@ int raft_recv_appendentries_response(raft_server_t* me_,
...
@@ -302,13 +302,13 @@ int raft_recv_appendentries_response(raft_server_t* me_,
else
if
(
me
->
current_term
!=
r
->
term
)
else
if
(
me
->
current_term
!=
r
->
term
)
return
0
;
return
0
;
in
t
match_idx
=
raft_node_get_match_idx
(
node
);
raft_index_
t
match_idx
=
raft_node_get_match_idx
(
node
);
if
(
0
==
r
->
success
)
if
(
0
==
r
->
success
)
{
{
/* If AppendEntries fails because of log inconsistency:
/* If AppendEntries fails because of log inconsistency:
decrement nextIndex and retry (§5.3) */
decrement nextIndex and retry (§5.3) */
in
t
next_idx
=
raft_node_get_next_idx
(
node
);
raft_index_
t
next_idx
=
raft_node_get_next_idx
(
node
);
assert
(
0
<
next_idx
);
assert
(
0
<
next_idx
);
/* Stale response -- ignore */
/* Stale response -- ignore */
assert
(
match_idx
<=
next_idx
-
1
);
assert
(
match_idx
<=
next_idx
-
1
);
...
@@ -347,7 +347,7 @@ int raft_recv_appendentries_response(raft_server_t* me_,
...
@@ -347,7 +347,7 @@ int raft_recv_appendentries_response(raft_server_t* me_,
raft_node_set_match_idx
(
node
,
r
->
current_idx
);
raft_node_set_match_idx
(
node
,
r
->
current_idx
);
/* Update commit idx */
/* Update commit idx */
in
t
point
=
r
->
current_idx
;
raft_index_
t
point
=
r
->
current_idx
;
if
(
point
)
if
(
point
)
{
{
raft_entry_t
*
ety
=
raft_get_entry_from_idx
(
me_
,
point
);
raft_entry_t
*
ety
=
raft_get_entry_from_idx
(
me_
,
point
);
...
@@ -477,7 +477,7 @@ int raft_recv_appendentries(
...
@@ -477,7 +477,7 @@ int raft_recv_appendentries(
for
(
i
=
0
;
i
<
ae
->
n_entries
;
i
++
)
for
(
i
=
0
;
i
<
ae
->
n_entries
;
i
++
)
{
{
raft_entry_t
*
ety
=
&
ae
->
entries
[
i
];
raft_entry_t
*
ety
=
&
ae
->
entries
[
i
];
in
t
ety_index
=
ae
->
prev_log_idx
+
1
+
i
;
raft_index_
t
ety_index
=
ae
->
prev_log_idx
+
1
+
i
;
raft_entry_t
*
existing_ety
=
raft_get_entry_from_idx
(
me_
,
ety_index
);
raft_entry_t
*
existing_ety
=
raft_get_entry_from_idx
(
me_
,
ety_index
);
if
(
existing_ety
&&
existing_ety
->
term
!=
ety
->
term
)
if
(
existing_ety
&&
existing_ety
->
term
!=
ety
->
term
)
{
{
...
@@ -513,7 +513,7 @@ int raft_recv_appendentries(
...
@@ -513,7 +513,7 @@ int raft_recv_appendentries(
min(leaderCommit, index of most recent entry) */
min(leaderCommit, index of most recent entry) */
if
(
raft_get_commit_idx
(
me_
)
<
ae
->
leader_commit
)
if
(
raft_get_commit_idx
(
me_
)
<
ae
->
leader_commit
)
{
{
in
t
last_log_idx
=
max
(
raft_get_current_idx
(
me_
),
1
);
raft_index_
t
last_log_idx
=
max
(
raft_get_current_idx
(
me_
),
1
);
raft_set_commit_idx
(
me_
,
min
(
last_log_idx
,
ae
->
leader_commit
));
raft_set_commit_idx
(
me_
,
min
(
last_log_idx
,
ae
->
leader_commit
));
}
}
...
@@ -544,7 +544,7 @@ static int __should_grant_vote(raft_server_private_t* me, msg_requestvote_t* vr)
...
@@ -544,7 +544,7 @@ static int __should_grant_vote(raft_server_private_t* me, msg_requestvote_t* vr)
/* Below we check if log is more up-to-date... */
/* Below we check if log is more up-to-date... */
in
t
current_idx
=
raft_get_current_idx
((
void
*
)
me
);
raft_index_
t
current_idx
=
raft_get_current_idx
((
void
*
)
me
);
/* Our log is definitely not more up-to-date if it's empty! */
/* Our log is definitely not more up-to-date if it's empty! */
if
(
0
==
current_idx
)
if
(
0
==
current_idx
)
...
@@ -756,7 +756,7 @@ int raft_recv_entry(raft_server_t* me_,
...
@@ -756,7 +756,7 @@ int raft_recv_entry(raft_server_t* me_,
/* Only send new entries.
/* Only send new entries.
* Don't send the entry to peers who are behind, to prevent them from
* Don't send the entry to peers who are behind, to prevent them from
* becoming congested. */
* becoming congested. */
in
t
next_idx
=
raft_node_get_next_idx
(
node
);
raft_index_
t
next_idx
=
raft_node_get_next_idx
(
node
);
if
(
next_idx
==
raft_get_current_idx
(
me_
))
if
(
next_idx
==
raft_get_current_idx
(
me_
))
raft_send_appendentries
(
me_
,
node
);
raft_send_appendentries
(
me_
,
node
);
}
}
...
@@ -817,7 +817,7 @@ int raft_apply_entry(raft_server_t* me_)
...
@@ -817,7 +817,7 @@ int raft_apply_entry(raft_server_t* me_)
if
(
me
->
last_applied_idx
==
raft_get_commit_idx
(
me_
))
if
(
me
->
last_applied_idx
==
raft_get_commit_idx
(
me_
))
return
-
1
;
return
-
1
;
in
t
log_idx
=
me
->
last_applied_idx
+
1
;
raft_index_
t
log_idx
=
me
->
last_applied_idx
+
1
;
raft_entry_t
*
ety
=
raft_get_entry_from_idx
(
me_
,
log_idx
);
raft_entry_t
*
ety
=
raft_get_entry_from_idx
(
me_
,
log_idx
);
if
(
!
ety
)
if
(
!
ety
)
...
@@ -841,7 +841,7 @@ int raft_apply_entry(raft_server_t* me_)
...
@@ -841,7 +841,7 @@ int raft_apply_entry(raft_server_t* me_)
if
(
!
raft_entry_is_cfg_change
(
ety
))
if
(
!
raft_entry_is_cfg_change
(
ety
))
return
0
;
return
0
;
in
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
.
log_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
)
{
...
@@ -871,7 +871,7 @@ int raft_apply_entry(raft_server_t* me_)
...
@@ -871,7 +871,7 @@ int raft_apply_entry(raft_server_t* me_)
return
0
;
return
0
;
}
}
raft_entry_t
*
raft_get_entries_from_idx
(
raft_server_t
*
me_
,
in
t
idx
,
int
*
n_etys
)
raft_entry_t
*
raft_get_entries_from_idx
(
raft_server_t
*
me_
,
raft_index_
t
idx
,
int
*
n_etys
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
return
log_get_from_idx
(
me
->
log
,
idx
,
n_etys
);
return
log_get_from_idx
(
me
->
log
,
idx
,
n_etys
);
...
@@ -893,7 +893,7 @@ int raft_send_appendentries(raft_server_t* me_, raft_node_t* node)
...
@@ -893,7 +893,7 @@ int raft_send_appendentries(raft_server_t* me_, raft_node_t* node)
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_term
=
0
;
ae
.
prev_log_term
=
0
;
in
t
next_idx
=
raft_node_get_next_idx
(
node
);
raft_index_
t
next_idx
=
raft_node_get_next_idx
(
node
);
/* figure out if the client needs a snapshot sent */
/* figure out if the client needs a snapshot sent */
if
(
0
<
me
->
snapshot_last_idx
&&
next_idx
<
me
->
snapshot_last_idx
)
if
(
0
<
me
->
snapshot_last_idx
&&
next_idx
<
me
->
snapshot_last_idx
)
...
@@ -953,7 +953,7 @@ int raft_send_appendentries_all(raft_server_t* me_)
...
@@ -953,7 +953,7 @@ int raft_send_appendentries_all(raft_server_t* me_)
return
0
;
return
0
;
}
}
raft_node_t
*
raft_add_node
(
raft_server_t
*
me_
,
void
*
udata
,
in
t
id
,
int
is_self
)
raft_node_t
*
raft_add_node
(
raft_server_t
*
me_
,
void
*
udata
,
raft_node_id_
t
id
,
int
is_self
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
...
@@ -993,7 +993,7 @@ raft_node_t* raft_add_node(raft_server_t* me_, void* udata, int id, int is_self)
...
@@ -993,7 +993,7 @@ raft_node_t* raft_add_node(raft_server_t* me_, void* udata, int id, int is_self)
return
node
;
return
node
;
}
}
raft_node_t
*
raft_add_non_voting_node
(
raft_server_t
*
me_
,
void
*
udata
,
in
t
id
,
int
is_self
)
raft_node_t
*
raft_add_non_voting_node
(
raft_server_t
*
me_
,
void
*
udata
,
raft_node_id_
t
id
,
int
is_self
)
{
{
if
(
raft_get_node
(
me_
,
id
))
if
(
raft_get_node
(
me_
,
id
))
return
NULL
;
return
NULL
;
...
@@ -1058,7 +1058,7 @@ int raft_vote(raft_server_t* me_, raft_node_t* node)
...
@@ -1058,7 +1058,7 @@ int raft_vote(raft_server_t* me_, raft_node_t* node)
return
raft_vote_for_nodeid
(
me_
,
node
?
raft_node_get_id
(
node
)
:
-
1
);
return
raft_vote_for_nodeid
(
me_
,
node
?
raft_node_get_id
(
node
)
:
-
1
);
}
}
int
raft_vote_for_nodeid
(
raft_server_t
*
me_
,
const
in
t
nodeid
)
int
raft_vote_for_nodeid
(
raft_server_t
*
me_
,
const
raft_node_id_
t
nodeid
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
...
@@ -1114,14 +1114,14 @@ int raft_entry_is_cfg_change(raft_entry_t* ety)
...
@@ -1114,14 +1114,14 @@ int raft_entry_is_cfg_change(raft_entry_t* ety)
RAFT_LOGTYPE_REMOVE_NODE
==
ety
->
type
);
RAFT_LOGTYPE_REMOVE_NODE
==
ety
->
type
);
}
}
void
raft_offer_log
(
raft_server_t
*
me_
,
raft_entry_t
*
ety
,
const
in
t
idx
)
void
raft_offer_log
(
raft_server_t
*
me_
,
raft_entry_t
*
ety
,
const
raft_index_
t
idx
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
if
(
!
raft_entry_is_cfg_change
(
ety
))
if
(
!
raft_entry_is_cfg_change
(
ety
))
return
;
return
;
in
t
node_id
=
me
->
cb
.
log_get_node_id
(
me_
,
raft_get_udata
(
me_
),
ety
,
idx
);
raft_node_id_
t
node_id
=
me
->
cb
.
log_get_node_id
(
me_
,
raft_get_udata
(
me_
),
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_
);
...
@@ -1163,14 +1163,14 @@ void raft_offer_log(raft_server_t* me_, raft_entry_t* ety, const int idx)
...
@@ -1163,14 +1163,14 @@ void raft_offer_log(raft_server_t* me_, raft_entry_t* ety, const int idx)
}
}
}
}
void
raft_pop_log
(
raft_server_t
*
me_
,
raft_entry_t
*
ety
,
const
in
t
idx
)
void
raft_pop_log
(
raft_server_t
*
me_
,
raft_entry_t
*
ety
,
const
raft_index_
t
idx
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
if
(
!
raft_entry_is_cfg_change
(
ety
))
if
(
!
raft_entry_is_cfg_change
(
ety
))
return
;
return
;
in
t
node_id
=
me
->
cb
.
log_get_node_id
(
me_
,
raft_get_udata
(
me_
),
ety
,
idx
);
raft_node_id_
t
node_id
=
me
->
cb
.
log_get_node_id
(
me_
,
raft_get_udata
(
me_
),
ety
,
idx
);
switch
(
ety
->
type
)
switch
(
ety
->
type
)
{
{
...
@@ -1223,7 +1223,7 @@ int raft_poll_entry(raft_server_t* me_, raft_entry_t **ety)
...
@@ -1223,7 +1223,7 @@ int raft_poll_entry(raft_server_t* me_, raft_entry_t **ety)
return
0
;
return
0
;
}
}
in
t
raft_get_first_entry_idx
(
raft_server_t
*
me_
)
raft_index_
t
raft_get_first_entry_idx
(
raft_server_t
*
me_
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
...
@@ -1235,7 +1235,7 @@ int raft_get_first_entry_idx(raft_server_t* me_)
...
@@ -1235,7 +1235,7 @@ int raft_get_first_entry_idx(raft_server_t* me_)
return
me
->
snapshot_last_idx
;
return
me
->
snapshot_last_idx
;
}
}
in
t
raft_get_num_snapshottable_logs
(
raft_server_t
*
me_
)
raft_index_
t
raft_get_num_snapshottable_logs
(
raft_server_t
*
me_
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
if
(
raft_get_log_count
(
me_
)
<=
1
)
if
(
raft_get_log_count
(
me_
)
<=
1
)
...
@@ -1250,7 +1250,7 @@ int raft_begin_snapshot(raft_server_t *me_)
...
@@ -1250,7 +1250,7 @@ int raft_begin_snapshot(raft_server_t *me_)
if
(
raft_get_num_snapshottable_logs
(
me_
)
==
0
)
if
(
raft_get_num_snapshottable_logs
(
me_
)
==
0
)
return
-
1
;
return
-
1
;
in
t
snapshot_target
=
raft_get_commit_idx
(
me_
);
raft_index_
t
snapshot_target
=
raft_get_commit_idx
(
me_
);
if
(
!
snapshot_target
||
snapshot_target
==
0
)
if
(
!
snapshot_target
||
snapshot_target
==
0
)
return
-
1
;
return
-
1
;
...
@@ -1288,7 +1288,7 @@ int raft_end_snapshot(raft_server_t *me_)
...
@@ -1288,7 +1288,7 @@ int raft_end_snapshot(raft_server_t *me_)
assert
(
me
->
snapshot_last_idx
==
raft_get_commit_idx
(
me_
));
assert
(
me
->
snapshot_last_idx
==
raft_get_commit_idx
(
me_
));
/* If needed, remove compacted logs */
/* If needed, remove compacted logs */
in
t
i
=
0
,
end
=
raft_get_num_snapshottable_logs
(
me_
);
raft_index_
t
i
=
0
,
end
=
raft_get_num_snapshottable_logs
(
me_
);
for
(;
i
<
end
;
i
++
)
for
(;
i
<
end
;
i
++
)
{
{
raft_entry_t
*
_ety
;
raft_entry_t
*
_ety
;
...
@@ -1315,7 +1315,7 @@ int raft_end_snapshot(raft_server_t *me_)
...
@@ -1315,7 +1315,7 @@ int raft_end_snapshot(raft_server_t *me_)
if
(
me
->
node
==
node
||
!
raft_node_is_active
(
node
))
if
(
me
->
node
==
node
||
!
raft_node_is_active
(
node
))
continue
;
continue
;
in
t
next_idx
=
raft_node_get_next_idx
(
node
);
raft_index_
t
next_idx
=
raft_node_get_next_idx
(
node
);
/* figure out if the client needs a snapshot sent */
/* figure out if the client needs a snapshot sent */
if
(
0
<
me
->
snapshot_last_idx
&&
next_idx
<
me
->
snapshot_last_idx
)
if
(
0
<
me
->
snapshot_last_idx
&&
next_idx
<
me
->
snapshot_last_idx
)
...
@@ -1332,8 +1332,8 @@ int raft_end_snapshot(raft_server_t *me_)
...
@@ -1332,8 +1332,8 @@ int raft_end_snapshot(raft_server_t *me_)
int
raft_begin_load_snapshot
(
int
raft_begin_load_snapshot
(
raft_server_t
*
me_
,
raft_server_t
*
me_
,
in
t
last_included_term
,
raft_term_
t
last_included_term
,
in
t
last_included_index
)
raft_index_
t
last_included_index
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
...
...
src/raft_server_properties.c
View file @
2343e58b
...
@@ -32,7 +32,7 @@ void raft_set_request_timeout(raft_server_t* me_, int millisec)
...
@@ -32,7 +32,7 @@ void raft_set_request_timeout(raft_server_t* me_, int millisec)
me
->
request_timeout
=
millisec
;
me
->
request_timeout
=
millisec
;
}
}
in
t
raft_get_nodeid
(
raft_server_t
*
me_
)
raft_node_id_
t
raft_get_nodeid
(
raft_server_t
*
me_
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
if
(
!
me
->
node
)
if
(
!
me
->
node
)
...
@@ -70,7 +70,7 @@ int raft_get_timeout_elapsed(raft_server_t* me_)
...
@@ -70,7 +70,7 @@ int raft_get_timeout_elapsed(raft_server_t* me_)
return
((
raft_server_private_t
*
)
me_
)
->
timeout_elapsed
;
return
((
raft_server_private_t
*
)
me_
)
->
timeout_elapsed
;
}
}
in
t
raft_get_log_count
(
raft_server_t
*
me_
)
raft_index_
t
raft_get_log_count
(
raft_server_t
*
me_
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
return
log_count
(
me
->
log
);
return
log_count
(
me
->
log
);
...
@@ -82,7 +82,7 @@ int raft_get_voted_for(raft_server_t* me_)
...
@@ -82,7 +82,7 @@ int raft_get_voted_for(raft_server_t* me_)
return
me
->
voted_for
;
return
me
->
voted_for
;
}
}
int
raft_set_current_term
(
raft_server_t
*
me_
,
const
in
t
term
)
int
raft_set_current_term
(
raft_server_t
*
me_
,
const
raft_term_
t
term
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
if
(
me
->
current_term
<
term
)
if
(
me
->
current_term
<
term
)
...
@@ -100,18 +100,18 @@ int raft_set_current_term(raft_server_t* me_, const int term)
...
@@ -100,18 +100,18 @@ int raft_set_current_term(raft_server_t* me_, const int term)
return
0
;
return
0
;
}
}
in
t
raft_get_current_term
(
raft_server_t
*
me_
)
raft_term_
t
raft_get_current_term
(
raft_server_t
*
me_
)
{
{
return
((
raft_server_private_t
*
)
me_
)
->
current_term
;
return
((
raft_server_private_t
*
)
me_
)
->
current_term
;
}
}
in
t
raft_get_current_idx
(
raft_server_t
*
me_
)
raft_index_
t
raft_get_current_idx
(
raft_server_t
*
me_
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
return
log_get_current_idx
(
me
->
log
);
return
log_get_current_idx
(
me
->
log
);
}
}
void
raft_set_commit_idx
(
raft_server_t
*
me_
,
in
t
idx
)
void
raft_set_commit_idx
(
raft_server_t
*
me_
,
raft_index_
t
idx
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
assert
(
me
->
commit_idx
<=
idx
);
assert
(
me
->
commit_idx
<=
idx
);
...
@@ -119,18 +119,18 @@ void raft_set_commit_idx(raft_server_t* me_, int idx)
...
@@ -119,18 +119,18 @@ void raft_set_commit_idx(raft_server_t* me_, int idx)
me
->
commit_idx
=
idx
;
me
->
commit_idx
=
idx
;
}
}
void
raft_set_last_applied_idx
(
raft_server_t
*
me_
,
in
t
idx
)
void
raft_set_last_applied_idx
(
raft_server_t
*
me_
,
raft_index_
t
idx
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
me
->
last_applied_idx
=
idx
;
me
->
last_applied_idx
=
idx
;
}
}
in
t
raft_get_last_applied_idx
(
raft_server_t
*
me_
)
raft_index_
t
raft_get_last_applied_idx
(
raft_server_t
*
me_
)
{
{
return
((
raft_server_private_t
*
)
me_
)
->
last_applied_idx
;
return
((
raft_server_private_t
*
)
me_
)
->
last_applied_idx
;
}
}
in
t
raft_get_commit_idx
(
raft_server_t
*
me_
)
raft_index_
t
raft_get_commit_idx
(
raft_server_t
*
me_
)
{
{
return
((
raft_server_private_t
*
)
me_
)
->
commit_idx
;
return
((
raft_server_private_t
*
)
me_
)
->
commit_idx
;
}
}
...
@@ -149,7 +149,7 @@ int raft_get_state(raft_server_t* me_)
...
@@ -149,7 +149,7 @@ int raft_get_state(raft_server_t* me_)
return
((
raft_server_private_t
*
)
me_
)
->
state
;
return
((
raft_server_private_t
*
)
me_
)
->
state
;
}
}
raft_node_t
*
raft_get_node
(
raft_server_t
*
me_
,
in
t
nodeid
)
raft_node_t
*
raft_get_node
(
raft_server_t
*
me_
,
raft_node_id_
t
nodeid
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
int
i
;
int
i
;
...
@@ -173,13 +173,13 @@ raft_node_t* raft_get_my_node(raft_server_t *me_)
...
@@ -173,13 +173,13 @@ raft_node_t* raft_get_my_node(raft_server_t *me_)
return
NULL
;
return
NULL
;
}
}
raft_node_t
*
raft_get_node_from_idx
(
raft_server_t
*
me_
,
const
in
t
idx
)
raft_node_t
*
raft_get_node_from_idx
(
raft_server_t
*
me_
,
const
raft_index_
t
idx
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
return
me
->
nodes
[
idx
];
return
me
->
nodes
[
idx
];
}
}
in
t
raft_get_current_leader
(
raft_server_t
*
me_
)
raft_node_id_
t
raft_get_current_leader
(
raft_server_t
*
me_
)
{
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
void
*
)
me_
;
if
(
me
->
current_leader
)
if
(
me
->
current_leader
)
...
@@ -213,9 +213,9 @@ int raft_is_candidate(raft_server_t* me_)
...
@@ -213,9 +213,9 @@ int raft_is_candidate(raft_server_t* me_)
return
raft_get_state
(
me_
)
==
RAFT_STATE_CANDIDATE
;
return
raft_get_state
(
me_
)
==
RAFT_STATE_CANDIDATE
;
}
}
in
t
raft_get_last_log_term
(
raft_server_t
*
me_
)
raft_term_
t
raft_get_last_log_term
(
raft_server_t
*
me_
)
{
{
in
t
current_idx
=
raft_get_current_idx
(
me_
);
raft_index_
t
current_idx
=
raft_get_current_idx
(
me_
);
if
(
0
<
current_idx
)
if
(
0
<
current_idx
)
{
{
raft_entry_t
*
ety
=
raft_get_entry_from_idx
(
me_
,
current_idx
);
raft_entry_t
*
ety
=
raft_get_entry_from_idx
(
me_
,
current_idx
);
...
@@ -243,17 +243,17 @@ raft_entry_t *raft_get_last_applied_entry(raft_server_t *me_)
...
@@ -243,17 +243,17 @@ raft_entry_t *raft_get_last_applied_entry(raft_server_t *me_)
return
log_get_at_idx
(
me
->
log
,
raft_get_last_applied_idx
(
me_
));
return
log_get_at_idx
(
me
->
log
,
raft_get_last_applied_idx
(
me_
));
}
}
in
t
raft_get_snapshot_last_idx
(
raft_server_t
*
me_
)
raft_index_
t
raft_get_snapshot_last_idx
(
raft_server_t
*
me_
)
{
{
return
((
raft_server_private_t
*
)
me_
)
->
snapshot_last_idx
;
return
((
raft_server_private_t
*
)
me_
)
->
snapshot_last_idx
;
}
}
in
t
raft_get_snapshot_last_term
(
raft_server_t
*
me_
)
raft_term_
t
raft_get_snapshot_last_term
(
raft_server_t
*
me_
)
{
{
return
((
raft_server_private_t
*
)
me_
)
->
snapshot_last_term
;
return
((
raft_server_private_t
*
)
me_
)
->
snapshot_last_term
;
}
}
void
raft_set_snapshot_metadata
(
raft_server_t
*
me_
,
int
term
,
in
t
idx
)
void
raft_set_snapshot_metadata
(
raft_server_t
*
me_
,
raft_term_t
term
,
raft_index_
t
idx
)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
me
->
snapshot_last_term
=
term
;
me
->
snapshot_last_term
=
term
;
...
...
tests/test_log.c
View file @
2343e58b
...
@@ -16,7 +16,7 @@ static int __logentry_get_node_id(
...
@@ -16,7 +16,7 @@ static int __logentry_get_node_id(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_entry_t
*
ety
,
raft_entry_t
*
ety
,
in
t
ety_idx
raft_index_
t
ety_idx
)
)
{
{
return
0
;
return
0
;
...
@@ -26,7 +26,7 @@ static int __log_offer(
...
@@ -26,7 +26,7 @@ static int __log_offer(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
raft_entry_t
*
entry
,
raft_entry_t
*
entry
,
in
t
entry_idx
raft_index_
t
entry_idx
)
)
{
{
CuAssertIntEquals
((
CuTest
*
)
raft
,
1
,
entry_idx
);
CuAssertIntEquals
((
CuTest
*
)
raft
,
1
,
entry_idx
);
...
@@ -37,7 +37,7 @@ static int __log_pop(
...
@@ -37,7 +37,7 @@ static int __log_pop(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
raft_entry_t
*
entry
,
raft_entry_t
*
entry
,
in
t
entry_idx
raft_index_
t
entry_idx
)
)
{
{
raft_entry_t
*
copy
=
malloc
(
sizeof
(
*
entry
));
raft_entry_t
*
copy
=
malloc
(
sizeof
(
*
entry
));
...
@@ -50,7 +50,7 @@ static int __log_pop_failing(
...
@@ -50,7 +50,7 @@ static int __log_pop_failing(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
raft_entry_t
*
entry
,
raft_entry_t
*
entry
,
in
t
entry_idx
raft_index_
t
entry_idx
)
)
{
{
return
-
1
;
return
-
1
;
...
...
tests/test_scenario.c
View file @
2343e58b
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
static
int
__raft_persist_term
(
static
int
__raft_persist_term
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
in
t
term
,
raft_term_
t
term
,
int
vote
int
vote
)
)
{
{
...
...
tests/test_server.c
View file @
2343e58b
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
static
int
__raft_persist_term
(
static
int
__raft_persist_term
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
in
t
term
,
raft_term_
t
term
,
int
vote
int
vote
)
)
{
{
...
@@ -37,7 +37,7 @@ int __raft_applylog(
...
@@ -37,7 +37,7 @@ int __raft_applylog(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_entry_t
*
ety
,
raft_entry_t
*
ety
,
in
t
idx
raft_index_
t
idx
)
)
{
{
return
0
;
return
0
;
...
@@ -47,7 +47,7 @@ int __raft_applylog_shutdown(
...
@@ -47,7 +47,7 @@ int __raft_applylog_shutdown(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_entry_t
*
ety
,
raft_entry_t
*
ety
,
in
t
idx
raft_index_
t
idx
)
)
{
{
return
RAFT_ERR_SHUTDOWN
;
return
RAFT_ERR_SHUTDOWN
;
...
@@ -307,7 +307,7 @@ static int __raft_logentry_offer(
...
@@ -307,7 +307,7 @@ static int __raft_logentry_offer(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_entry_t
*
ety
,
raft_entry_t
*
ety
,
in
t
ety_idx
raft_index_
t
ety_idx
)
)
{
{
CuAssertIntEquals
(
udata
,
ety_idx
,
1
);
CuAssertIntEquals
(
udata
,
ety_idx
,
1
);
...
@@ -1572,14 +1572,14 @@ typedef enum {
...
@@ -1572,14 +1572,14 @@ typedef enum {
typedef
struct
{
typedef
struct
{
__raft_error_type_e
type
;
__raft_error_type_e
type
;
in
t
idx
;
raft_index_
t
idx
;
}
__raft_error_t
;
}
__raft_error_t
;
static
int
__raft_log_offer_error
(
static
int
__raft_log_offer_error
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
raft_entry_t
*
entry
,
raft_entry_t
*
entry
,
in
t
entry_idx
)
raft_index_
t
entry_idx
)
{
{
__raft_error_t
*
error
=
user_data
;
__raft_error_t
*
error
=
user_data
;
...
@@ -1592,7 +1592,7 @@ static int __raft_log_pop_error(
...
@@ -1592,7 +1592,7 @@ static int __raft_log_pop_error(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
raft_entry_t
*
entry
,
raft_entry_t
*
entry
,
in
t
entry_idx
)
raft_index_
t
entry_idx
)
{
{
__raft_error_t
*
error
=
user_data
;
__raft_error_t
*
error
=
user_data
;
...
...
tests/test_snapshotting.c
View file @
2343e58b
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
static
int
__raft_persist_term
(
static
int
__raft_persist_term
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
in
t
term
,
raft_term_
t
term
,
int
vote
int
vote
)
)
{
{
...
@@ -34,7 +34,7 @@ static int __raft_applylog(
...
@@ -34,7 +34,7 @@ static int __raft_applylog(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_entry_t
*
ety
,
raft_entry_t
*
ety
,
in
t
idx
raft_index_
t
idx
)
)
{
{
return
0
;
return
0
;
...
...
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