Commit 2343e58b authored by Yossi Gottlieb's avatar Yossi Gottlieb Committed by Willem Thiart
Browse files

Add raft_types.h and better typedefs.

parent 84ac58a4
...@@ -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 int term; raft_term_t term;
/** the entry's unique ID */ /** the entry's unique ID */
unsigned int 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 int id; raft_entry_id_t id;
/** the entry's term */ /** the entry's term */
int term; raft_term_t term;
/** the entry's index */ /** the entry's index */
int 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 */
int term; raft_term_t term;
/** candidate requesting vote */ /** candidate requesting vote */
int candidate_id; raft_node_id_t candidate_id;
/** index of candidate's last log entry */ /** index of candidate's last log entry */
int last_log_idx; raft_index_t last_log_idx;
/** term of candidate's last log entry */ /** term of candidate's last log entry */
int 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 */
int 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 */
int 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 */
int 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 */
int 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 */
int 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 */
int 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 */
int 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 */
int 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,
int 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,
int term, raft_term_t term,
int 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,
int 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, int 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, int 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 */
int 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 */
int 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 */
int 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 */
int 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 */
int 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 */
int 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 */
int 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, int 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 int 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 int 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 */
int 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 int 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 int 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, int 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 */
int 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 */
int 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
**/ **/
int 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_);
int 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_,
int last_included_term, raft_term_t last_included_term,
int 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_);
int raft_get_snapshot_last_idx(raft_server_t *me_); raft_index_t raft_get_snapshot_last_idx(raft_server_t *me_);
int 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, int 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.
......
#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(int 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 */
int 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_, int 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_, int 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_, int 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_);
int 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, int term); int log_load_from_snapshot(log_t *me_, raft_index_t idx, raft_term_t term);
int log_get_base(log_t* me_); raft_index_t log_get_base(log_t* me_);
#endif /* RAFT_LOG_H_ */ #endif /* RAFT_LOG_H_ */
...@@ -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 */
int 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. */
int 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 */
int 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 */
int 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 */
int 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 */
int snapshot_last_idx; raft_index_t snapshot_last_idx;
int 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, int 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, int 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, int 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, int matchIdx); void raft_node_set_match_idx(raft_node_t* node, raft_index_t matchIdx);
int 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 int 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 int idx); void raft_pop_log(raft_server_t* me_, raft_entry_t* ety, const raft_index_t idx);
int 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_);
......
#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_ */
...@@ -22,16 +22,16 @@ ...@@ -22,16 +22,16 @@
typedef struct typedef struct
{ {
/* size of array */ /* size of array */
int size; raft_index_t size;
/* the amount of elements in the array */ /* the amount of elements in the array */
int count; raft_index_t count;
/* position of the queue */ /* position of the queue */
int 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 */
int 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, int 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)
{ {
int 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, int 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(int 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_;
int 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_, int 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_;
int 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_, int 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_;
int 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];
} }
int 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_, int 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;)
{ {
int idx_tmp = me->base + me->count; raft_index_t idx_tmp = me->base + me->count;
int 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_;
int 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);
} }
int 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;
} }
int 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;
} }
...@@ -28,15 +28,15 @@ typedef struct ...@@ -28,15 +28,15 @@ typedef struct
{ {
void* udata; void* udata;
int next_idx; raft_index_t next_idx;
int match_idx; raft_index_t match_idx;
int flags; int flags;
int id; raft_node_id_t id;
} raft_node_private_t; } raft_node_private_t;
raft_node_t* raft_node_new(void* udata, int 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_);
} }
int 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_, int 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;
} }
int 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_, int 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;
} }
int 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;
......
...@@ -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_, int 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_, int 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;
int 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) */
int 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 */
int 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];
int 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)
{ {
int 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... */
int 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. */
int 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;
int 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;
int 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_, int 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;
int 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, int 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, int 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 int 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 int 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;
int 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 int 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;
int 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;
} }
int 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;
} }
int 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;
int 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 */
int 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;
int 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_,
int last_included_term, raft_term_t last_included_term,
int 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_;
......
...@@ -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;
} }
int 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;
} }
int 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 int 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;
} }
int 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;
} }
int 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_, int 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_, int 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;
} }
int 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;
} }
int 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_, int 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 int 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];
} }
int 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;
} }
int raft_get_last_log_term(raft_server_t* me_) raft_term_t raft_get_last_log_term(raft_server_t* me_)
{ {
int 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_));
} }
int 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;
} }
int 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, int 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;
......
...@@ -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,
int 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,
int 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,
int 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,
int entry_idx raft_index_t entry_idx
) )
{ {
return -1; return -1;
......
...@@ -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,
int term, raft_term_t term,
int vote int vote
) )
{ {
......
...@@ -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,
int 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,
int 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,
int 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,
int 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;
int 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,
int 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,
int entry_idx) raft_index_t entry_idx)
{ {
__raft_error_t *error = user_data; __raft_error_t *error = user_data;
......
...@@ -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,
int 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,
int idx raft_index_t idx
) )
{ {
return 0; return 0;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment