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
RedisLabs Raft
Commits
aec96c76
Commit
aec96c76
authored
May 24, 2018
by
Yossi Gottlieb
Browse files
Add raft_types.h and better typedefs.
parent
ca1ef4df
Changes
12
Hide whitespace changes
Inline
Side-by-side
include/raft.h
View file @
aec96c76
...
@@ -10,6 +10,8 @@
...
@@ -10,6 +10,8 @@
#ifndef RAFT_H_
#ifndef RAFT_H_
#define RAFT_H_
#define RAFT_H_
#include "raft_types.h"
#define RAFT_ERR_NOT_LEADER -2
#define RAFT_ERR_NOT_LEADER -2
#define RAFT_ERR_ONE_VOTING_CHANGE_ONLY -3
#define RAFT_ERR_ONE_VOTING_CHANGE_ONLY -3
#define RAFT_ERR_SHUTDOWN -4
#define RAFT_ERR_SHUTDOWN -4
...
@@ -81,10 +83,10 @@ typedef struct
...
@@ -81,10 +83,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
;
...
@@ -105,13 +107,13 @@ typedef raft_entry_t msg_entry_t;
...
@@ -105,13 +107,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.
...
@@ -120,16 +122,16 @@ typedef struct
...
@@ -120,16 +122,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.
...
@@ -137,7 +139,7 @@ typedef struct
...
@@ -137,7 +139,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
;
...
@@ -150,19 +152,19 @@ typedef struct
...
@@ -150,19 +152,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
;
...
@@ -177,7 +179,7 @@ typedef struct
...
@@ -177,7 +179,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
;
...
@@ -188,10 +190,10 @@ typedef struct
...
@@ -188,10 +190,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
;
...
@@ -286,7 +288,7 @@ typedef int (
...
@@ -286,7 +288,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.
...
@@ -302,8 +304,8 @@ typedef int (
...
@@ -302,8 +304,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.
...
@@ -332,7 +334,7 @@ typedef int (
...
@@ -332,7 +334,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
);
);
typedef
struct
typedef
struct
...
@@ -440,7 +442,7 @@ void raft_set_callbacks(raft_server_t* me, raft_cbs_t* funcs, void* user_data);
...
@@ -440,7 +442,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
...
@@ -450,7 +452,7 @@ raft_node_t* raft_add_node(raft_server_t* me, void* user_data, int id, int is_se
...
@@ -450,7 +452,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. */
...
@@ -586,19 +588,19 @@ int raft_get_num_voting_nodes(raft_server_t* me_);
...
@@ -586,19 +588,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 */
...
@@ -622,15 +624,15 @@ int raft_get_request_timeout(raft_server_t* me);
...
@@ -622,15 +624,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 */
...
@@ -643,18 +645,18 @@ void raft_node_set_udata(raft_node_t* me, void* user_data);
...
@@ -643,18 +645,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 */
...
@@ -667,7 +669,7 @@ int raft_get_voted_for(raft_server_t* me);
...
@@ -667,7 +669,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;
...
@@ -690,19 +692,19 @@ int raft_vote(raft_server_t* me_, raft_node_t* node);
...
@@ -690,19 +692,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.
...
@@ -720,7 +722,7 @@ int raft_msg_entry_response_committed(raft_server_t* me_,
...
@@ -720,7 +722,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. */
...
@@ -728,7 +730,7 @@ int raft_get_state(raft_server_t* me_);
...
@@ -728,7 +730,7 @@ int raft_get_state(raft_server_t* me_);
/** The the most recent log's term
/** The 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 commiting entries,
* Voting nodes can take part in elections and in-regards to commiting entries,
...
@@ -797,7 +799,7 @@ int raft_end_snapshot(raft_server_t *me_);
...
@@ -797,7 +799,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
**/
**/
...
@@ -813,7 +815,7 @@ int raft_poll_entry(raft_server_t* me_, raft_entry_t **ety);
...
@@ -813,7 +815,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
*
*
...
@@ -829,8 +831,8 @@ int raft_get_first_entry_idx(raft_server_t* me_);
...
@@ -829,8 +831,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.
*
*
...
@@ -840,11 +842,11 @@ int raft_begin_load_snapshot(raft_server_t *me_,
...
@@ -840,11 +842,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 @
aec96c76
#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 @
aec96c76
...
@@ -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 @
aec96c76
#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 @
aec96c76
...
@@ -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_
;
...
@@ -99,7 +99,7 @@ int log_load_from_snapshot(log_t *me_, int idx, int term)
...
@@ -99,7 +99,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
)
...
@@ -140,7 +140,7 @@ void log_clear(log_t* me_)
...
@@ -140,7 +140,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
);
...
@@ -165,10 +165,10 @@ int log_append_entry(log_t* me_, raft_entry_t* ety)
...
@@ -165,10 +165,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
);
...
@@ -194,10 +194,10 @@ raft_entry_t* log_get_from_idx(log_t* me_, int idx, int *n_etys)
...
@@ -194,10 +194,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
;
...
@@ -215,12 +215,12 @@ raft_entry_t* log_get_at_idx(log_t* me_, int idx)
...
@@ -215,12 +215,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_
;
...
@@ -232,8 +232,8 @@ int log_delete(log_t* me_, int idx)
...
@@ -232,8 +232,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
)
{
{
...
@@ -252,7 +252,7 @@ int log_delete(log_t* me_, int idx)
...
@@ -252,7 +252,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
;
...
@@ -304,13 +304,13 @@ void log_free(log_t * me_)
...
@@ -304,13 +304,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 @
aec96c76
...
@@ -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 @
aec96c76
...
@@ -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
);
...
@@ -467,7 +467,7 @@ int raft_recv_appendentries(
...
@@ -467,7 +467,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
)
{
{
...
@@ -503,7 +503,7 @@ int raft_recv_appendentries(
...
@@ -503,7 +503,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
));
}
}
...
@@ -534,7 +534,7 @@ static int __should_grant_vote(raft_server_private_t* me, msg_requestvote_t* vr)
...
@@ -534,7 +534,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
)
...
@@ -735,7 +735,7 @@ int raft_recv_entry(raft_server_t* me_,
...
@@ -735,7 +735,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
);
}
}
...
@@ -795,7 +795,7 @@ int raft_apply_entry(raft_server_t* me_)
...
@@ -795,7 +795,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
)
...
@@ -822,7 +822,7 @@ int raft_apply_entry(raft_server_t* me_)
...
@@ -822,7 +822,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
)
{
...
@@ -852,7 +852,7 @@ int raft_apply_entry(raft_server_t* me_)
...
@@ -852,7 +852,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
);
...
@@ -874,7 +874,7 @@ int raft_send_appendentries(raft_server_t* me_, raft_node_t* node)
...
@@ -874,7 +874,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
)
...
@@ -929,7 +929,7 @@ int raft_send_appendentries_all(raft_server_t* me_)
...
@@ -929,7 +929,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_
;
...
@@ -964,7 +964,7 @@ raft_node_t* raft_add_node(raft_server_t* me_, void* udata, int id, int is_self)
...
@@ -964,7 +964,7 @@ raft_node_t* raft_add_node(raft_server_t* me_, void* udata, int id, int is_self)
return
me
->
nodes
[
me
->
num_nodes
-
1
];
return
me
->
nodes
[
me
->
num_nodes
-
1
];
}
}
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
;
...
@@ -1026,7 +1026,7 @@ int raft_vote(raft_server_t* me_, raft_node_t* node)
...
@@ -1026,7 +1026,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_
;
...
@@ -1082,14 +1082,14 @@ int raft_entry_is_cfg_change(raft_entry_t* ety)
...
@@ -1082,14 +1082,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_
);
...
@@ -1133,14 +1133,14 @@ void raft_offer_log(raft_server_t* me_, raft_entry_t* ety, const int idx)
...
@@ -1133,14 +1133,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
)
{
{
...
@@ -1193,7 +1193,7 @@ int raft_poll_entry(raft_server_t* me_, raft_entry_t **ety)
...
@@ -1193,7 +1193,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_
;
...
@@ -1205,7 +1205,7 @@ int raft_get_first_entry_idx(raft_server_t* me_)
...
@@ -1205,7 +1205,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
)
...
@@ -1220,7 +1220,7 @@ int raft_begin_snapshot(raft_server_t *me_)
...
@@ -1220,7 +1220,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
;
...
@@ -1255,7 +1255,7 @@ int raft_end_snapshot(raft_server_t *me_)
...
@@ -1255,7 +1255,7 @@ int raft_end_snapshot(raft_server_t *me_)
return
-
1
;
return
-
1
;
/* If needed, remove compacted logs */
/* If needed, remove compacted logs */
in
t
i
=
log_get_base
(
me
->
log
)
+
1
,
end
=
raft_get_commit_idx
(
me_
);
raft_index_
t
i
=
log_get_base
(
me
->
log
)
+
1
,
end
=
raft_get_commit_idx
(
me_
);
for
(;
i
<=
end
;
i
++
)
for
(;
i
<=
end
;
i
++
)
{
{
raft_entry_t
*
_ety
;
raft_entry_t
*
_ety
;
...
@@ -1282,7 +1282,7 @@ int raft_end_snapshot(raft_server_t *me_)
...
@@ -1282,7 +1282,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
)
...
@@ -1297,8 +1297,8 @@ int raft_end_snapshot(raft_server_t *me_)
...
@@ -1297,8 +1297,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 @
aec96c76
...
@@ -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 @
aec96c76
...
@@ -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 @
aec96c76
...
@@ -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 @
aec96c76
...
@@ -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
;
...
@@ -72,7 +72,7 @@ static int __raft_send_appendentries(raft_server_t* raft,
...
@@ -72,7 +72,7 @@ static int __raft_send_appendentries(raft_server_t* raft,
static
int
__raft_log_get_node_id
(
raft_server_t
*
raft
,
static
int
__raft_log_get_node_id
(
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_entry_t
*
entry
,
raft_entry_t
*
entry
,
in
t
entry_idx
)
raft_index_
t
entry_idx
)
{
{
return
atoi
(
entry
->
data
.
buf
);
return
atoi
(
entry
->
data
.
buf
);
}
}
...
@@ -80,7 +80,7 @@ static int __raft_log_get_node_id(raft_server_t* raft,
...
@@ -80,7 +80,7 @@ static int __raft_log_get_node_id(raft_server_t* raft,
static
int
__raft_log_offer
(
raft_server_t
*
raft
,
static
int
__raft_log_offer
(
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_entry_t
*
entry
,
raft_entry_t
*
entry
,
in
t
entry_idx
)
raft_index_
t
entry_idx
)
{
{
switch
(
entry
->
type
)
{
switch
(
entry
->
type
)
{
case
RAFT_LOGTYPE_ADD_NONVOTING_NODE
:
case
RAFT_LOGTYPE_ADD_NONVOTING_NODE
:
...
@@ -315,7 +315,7 @@ static int __raft_logentry_offer(
...
@@ -315,7 +315,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
);
...
@@ -1580,14 +1580,14 @@ typedef enum {
...
@@ -1580,14 +1580,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
;
...
@@ -1600,7 +1600,7 @@ static int __raft_log_pop_error(
...
@@ -1600,7 +1600,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 @
aec96c76
...
@@ -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