Commit aec96c76 authored by Yossi Gottlieb's avatar Yossi Gottlieb
Browse files

Add raft_types.h and better typedefs.

parent ca1ef4df
...@@ -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 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;
...@@ -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 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.
...@@ -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 */
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.
...@@ -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 */
int 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 */
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;
...@@ -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 */
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;
...@@ -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 */
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;
...@@ -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,
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.
...@@ -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,
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.
...@@ -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,
int 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, 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
...@@ -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, 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. */
...@@ -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 */
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 */
...@@ -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 */
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 */
...@@ -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, 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 */
...@@ -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 */
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;
...@@ -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 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.
...@@ -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 */
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. */
...@@ -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 */
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 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
**/ **/
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
**/ **/
...@@ -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_);
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
* *
...@@ -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_,
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.
* *
...@@ -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_);
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_;
...@@ -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(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)
...@@ -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_;
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);
...@@ -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_, 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);
...@@ -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_, 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;
...@@ -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];
} }
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_;
...@@ -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;)
{ {
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)
{ {
...@@ -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_;
int 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);
} }
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);
...@@ -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];
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)
{ {
...@@ -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)
{ {
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));
} }
...@@ -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... */
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)
...@@ -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. */
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);
} }
...@@ -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;
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)
...@@ -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;
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) {
...@@ -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_, 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);
...@@ -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;
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)
...@@ -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, 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_;
...@@ -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, 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;
...@@ -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 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_;
...@@ -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 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_);
...@@ -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 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)
{ {
...@@ -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;
} }
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_;
...@@ -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;
} }
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)
...@@ -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;
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;
...@@ -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 */
int 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;
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)
...@@ -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_,
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;
...@@ -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,
int 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,
int 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,
int 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;
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;
...@@ -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,
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