Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
RedisLabs Raft
Commits
8ee3f264
Unverified
Commit
8ee3f264
authored
Mar 30, 2022
by
Ozan Tezcan
Committed by
GitHub
Mar 30, 2022
Browse files
Add raft_ prefix for exported symbols (#96)
parent
80849148
Changes
9
Hide whitespace changes
Inline
Side-by-side
include/raft.h
View file @
8ee3f264
...
@@ -119,7 +119,21 @@ typedef struct raft_entry
...
@@ -119,7 +119,21 @@ typedef struct raft_entry
/** Message sent from client to server.
/** Message sent from client to server.
* The client sends this message to a server with the intention of having it
* The client sends this message to a server with the intention of having it
* applied to the FSM. */
* applied to the FSM. */
typedef
raft_entry_t
msg_entry_t
;
typedef
raft_entry_t
raft_entry_req_t
;
/** Entry message response.
* Indicates to client if entry was committed or not. */
typedef
struct
{
/** the entry's unique ID */
raft_entry_id_t
id
;
/** the entry's term */
raft_term_t
term
;
/** the entry's index */
raft_index_t
idx
;
}
raft_entry_resp_t
;
typedef
struct
typedef
struct
{
{
...
@@ -136,20 +150,6 @@ typedef struct
...
@@ -136,20 +150,6 @@ typedef struct
int
last_chunk
;
int
last_chunk
;
}
raft_snapshot_chunk_t
;
}
raft_snapshot_chunk_t
;
/** Entry message response.
* Indicates to client if entry was committed or not. */
typedef
struct
{
/** the entry's unique ID */
raft_entry_id_t
id
;
/** the entry's term */
raft_term_t
term
;
/** the entry's index */
raft_index_t
idx
;
}
msg_entry_response_t
;
/** Vote request message.
/** Vote request message.
* Sent to nodes when a server wants to become leader.
* Sent to nodes when a server wants to become leader.
* This message could force a leader/candidate to become a follower. */
* This message could force a leader/candidate to become a follower. */
...
@@ -169,7 +169,7 @@ typedef struct
...
@@ -169,7 +169,7 @@ typedef struct
/** term of candidate's last log entry */
/** term of candidate's last log entry */
raft_term_t
last_log_term
;
raft_term_t
last_log_term
;
}
msg
_requestvote_t
;
}
raft
_requestvote_
req_
t
;
/** Vote request response message.
/** Vote request response message.
* Indicates if node has accepted the server's vote request. */
* Indicates if node has accepted the server's vote request. */
...
@@ -186,7 +186,7 @@ typedef struct
...
@@ -186,7 +186,7 @@ typedef struct
/** true means candidate received vote */
/** true means candidate received vote */
int
vote_granted
;
int
vote_granted
;
}
msg
_requestvote_resp
onse
_t
;
}
raft
_requestvote_resp_t
;
typedef
struct
typedef
struct
{
{
...
@@ -209,7 +209,7 @@ typedef struct
...
@@ -209,7 +209,7 @@ typedef struct
/** snapshot chunk **/
/** snapshot chunk **/
raft_snapshot_chunk_t
chunk
;
raft_snapshot_chunk_t
chunk
;
}
msg
_snapshot_t
;
}
raft
_snapshot_
req_
t
;
typedef
struct
typedef
struct
{
{
...
@@ -227,7 +227,7 @@ typedef struct
...
@@ -227,7 +227,7 @@ typedef struct
/** 1 if this is a response to the final chunk */
/** 1 if this is a response to the final chunk */
int
last_chunk
;
int
last_chunk
;
}
msg
_snapshot_resp
onse
_t
;
}
raft
_snapshot_resp_t
;
/** Appendentries message.
/** Appendentries message.
* This message is used to tell nodes if it's safe to apply entries to the FSM.
* This message is used to tell nodes if it's safe to apply entries to the FSM.
...
@@ -261,8 +261,8 @@ typedef struct
...
@@ -261,8 +261,8 @@ typedef struct
int
n_entries
;
int
n_entries
;
/** array of pointers to entries within this message */
/** array of pointers to entries within this message */
msg
_entry_t
**
entries
;
raft
_entry_
req_
t
**
entries
;
}
msg
_appendentries_t
;
}
raft
_appendentries_
req_
t
;
/** Appendentries response message.
/** Appendentries response message.
* Can be sent without any entries as a keep alive message.
* Can be sent without any entries as a keep alive message.
...
@@ -285,7 +285,7 @@ typedef struct
...
@@ -285,7 +285,7 @@ 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 */
raft_index_t
current_idx
;
raft_index_t
current_idx
;
}
msg
_appendentries_resp
onse
_t
;
}
raft
_appendentries_resp_t
;
typedef
struct
raft_server
raft_server_t
;
typedef
struct
raft_server
raft_server_t
;
typedef
struct
raft_node
raft_node_t
;
typedef
struct
raft_node
raft_node_t
;
...
@@ -297,12 +297,12 @@ typedef struct raft_node raft_node_t;
...
@@ -297,12 +297,12 @@ typedef struct raft_node raft_node_t;
* @param[in] msg The request vote message to be sent
* @param[in] msg The request vote message to be sent
* @return 0 on success */
* @return 0 on success */
typedef
int
(
typedef
int
(
*
func
_send_requestvote_f
*
raft
_send_requestvote_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_requestvote_t
*
msg
raft
_requestvote_
req_
t
*
msg
);
);
/** Callback for sending append entries messages.
/** Callback for sending append entries messages.
...
@@ -312,12 +312,12 @@ typedef int (
...
@@ -312,12 +312,12 @@ typedef int (
* @param[in] msg The appendentries message to be sent
* @param[in] msg The appendentries message to be sent
* @return 0 on success */
* @return 0 on success */
typedef
int
(
typedef
int
(
*
func
_send_appendentries_f
*
raft
_send_appendentries_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_appendentries_t
*
msg
raft
_appendentries_
req_
t
*
msg
);
);
/** Callback for sending snapshot messages.
/** Callback for sending snapshot messages.
...
@@ -327,12 +327,12 @@ typedef int (
...
@@ -327,12 +327,12 @@ typedef int (
* @param[in] msg Snapshot msg
* @param[in] msg Snapshot msg
**/
**/
typedef
int
(
typedef
int
(
*
func
_send_snapshot_f
*
raft
_send_snapshot_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_snapshot_t
*
msg
raft
_snapshot_
req_
t
*
msg
);
);
/** Callback for loading the received snapshot. User should load snapshot using
/** Callback for loading the received snapshot. User should load snapshot using
...
@@ -366,7 +366,7 @@ typedef int (
...
@@ -366,7 +366,7 @@ typedef int (
* @param[in] snapshot_term Received snapshot term
* @param[in] snapshot_term Received snapshot term
* @return 0 on success */
* @return 0 on success */
typedef
int
(
typedef
int
(
*
func
_load_snapshot_f
*
raft
_load_snapshot_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
...
@@ -386,7 +386,7 @@ typedef int (
...
@@ -386,7 +386,7 @@ typedef int (
* @param[in] chunk Snapshot chunk
* @param[in] chunk Snapshot chunk
* @return 0 on success */
* @return 0 on success */
typedef
int
(
typedef
int
(
*
func
_get_snapshot_chunk_f
*
raft
_get_snapshot_chunk_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
...
@@ -403,7 +403,7 @@ typedef int (
...
@@ -403,7 +403,7 @@ typedef int (
* @param[in] chunk Snapshot chunk
* @param[in] chunk Snapshot chunk
* @return 0 on success */
* @return 0 on success */
typedef
int
(
typedef
int
(
*
func
_store_snapshot_chunk_f
*
raft
_store_snapshot_chunk_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
...
@@ -420,7 +420,7 @@ typedef int (
...
@@ -420,7 +420,7 @@ typedef int (
* @param[in] user_data User data that is passed from Raft server
* @param[in] user_data User data that is passed from Raft server
* @return 0 on success */
* @return 0 on success */
typedef
int
(
typedef
int
(
*
func
_clear_snapshot_f
*
raft
_clear_snapshot_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
void
*
user_data
...
@@ -433,7 +433,7 @@ typedef int (
...
@@ -433,7 +433,7 @@ typedef int (
* @param[in] node The node
* @param[in] node The node
* @return 0 does not want to be notified again; otherwise -1 */
* @return 0 does not want to be notified again; otherwise -1 */
typedef
int
(
typedef
int
(
*
func
_node_has_sufficient_logs_f
*
raft
_node_has_sufficient_logs_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
...
@@ -450,7 +450,7 @@ typedef int (
...
@@ -450,7 +450,7 @@ typedef int (
* @param[in] user_data User data that is passed from Raft server
* @param[in] user_data User data that is passed from Raft server
* @param[in] buf The buffer that was logged */
* @param[in] buf The buffer that was logged */
typedef
void
(
typedef
void
(
*
func
_log_f
*
raft
_log_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
raft_node_id_t
node_id
,
raft_node_id_t
node_id
,
...
@@ -466,7 +466,7 @@ typedef void (
...
@@ -466,7 +466,7 @@ typedef void (
* @param[in] vote The node we voted for
* @param[in] vote The node we voted for
* @return 0 on success */
* @return 0 on success */
typedef
int
(
typedef
int
(
*
func
_persist_vote_f
*
raft
_persist_vote_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
...
@@ -482,7 +482,7 @@ typedef int (
...
@@ -482,7 +482,7 @@ typedef int (
* @param[in] vote The node value dictating we haven't voted for anybody
* @param[in] vote The node value dictating we haven't voted for anybody
* @return 0 on success */
* @return 0 on success */
typedef
int
(
typedef
int
(
*
func
_persist_term_f
*
raft
_persist_term_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
...
@@ -509,7 +509,7 @@ typedef int (
...
@@ -509,7 +509,7 @@ typedef int (
* @return 0 on success
* @return 0 on success
* */
* */
typedef
int
(
typedef
int
(
*
func
_logentry_event_f
*
raft
_logentry_event_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
...
@@ -528,7 +528,7 @@ typedef int (
...
@@ -528,7 +528,7 @@ typedef int (
* @return the node ID of the node
* @return the node ID of the node
* */
* */
typedef
raft_node_id_t
(
typedef
raft_node_id_t
(
*
func
_get_node_id_f
*
raft
_get_node_id_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
...
@@ -548,7 +548,7 @@ typedef raft_node_id_t (
...
@@ -548,7 +548,7 @@ typedef raft_node_id_t (
* @param[in] entry The entry that was the trigger for the event. Could be NULL.
* @param[in] entry The entry that was the trigger for the event. Could be NULL.
* @param[in] type The type of membership change */
* @param[in] type The type of membership change */
typedef
void
(
typedef
void
(
*
func
_membership_event_f
*
raft
_membership_event_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
...
@@ -565,7 +565,7 @@ typedef void (
...
@@ -565,7 +565,7 @@ typedef void (
* @param[in] user_data User data that is passed from Raft server
* @param[in] user_data User data that is passed from Raft server
* @param[in] state The new cluster state. */
* @param[in] state The new cluster state. */
typedef
void
(
typedef
void
(
*
func
_state_event_f
*
raft
_state_event_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
...
@@ -581,7 +581,7 @@ typedef void (
...
@@ -581,7 +581,7 @@ typedef void (
* @param[in] result the leadership transfer result
* @param[in] result the leadership transfer result
*/
*/
typedef
void
(
typedef
void
(
*
func
_transfer_event_f
*
raft
_transfer_event_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
...
@@ -594,19 +594,19 @@ typedef void (
...
@@ -594,19 +594,19 @@ typedef void (
* @return 0 on success
* @return 0 on success
*/
*/
typedef
int
(
typedef
int
(
*
func
_send_timeoutnow_f
*
raft
_send_timeoutnow_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
raft_node_t
*
node
raft_node_t
*
node
);
);
/** Callback to skip sending
msg
_appendentries to the node
/** Callback to skip sending
raft
_appendentries
_req
to the node
*
*
* Implementing this callback is optional
* Implementing this callback is optional
*
*
* If there are already pending appendentries messages in flight, you may want
* If there are already pending appendentries messages in flight, you may want
* to skip sending more until you receive response for the previous ones.
* to skip sending more until you receive response for the previous ones.
* If the node is a slow consumer and you create
msg
_appendentries for each
* If the node is a slow consumer and you create
raft
_appendentries
_req
for each
* batch of new entries received, it may cause out of memory.
* batch of new entries received, it may cause out of memory.
*
*
* Also, this way you can do batching. If new entries are received with an
* Also, this way you can do batching. If new entries are received with an
...
@@ -620,12 +620,12 @@ typedef int (
...
@@ -620,12 +620,12 @@ typedef int (
* performance.
* performance.
*
*
* @param[in] raft The Raft server making this callback
* @param[in] raft The Raft server making this callback
* @param[in] node The node that we are about to send
msg
_appendentries to
* @param[in] node The node that we are about to send
raft
_appendentries
_req
to
* @return 0 to send message
* @return 0 to send message
* Any other value to skip sending message
* Any other value to skip sending message
*/
*/
typedef
int
(
typedef
int
(
*
func
_backpressure_f
*
raft
_backpressure_f
)
(
)
(
raft_server_t
*
raft
,
raft_server_t
*
raft
,
void
*
user_data
,
void
*
user_data
,
...
@@ -635,68 +635,68 @@ typedef int (
...
@@ -635,68 +635,68 @@ typedef int (
typedef
struct
typedef
struct
{
{
/** Callback for sending request vote messages */
/** Callback for sending request vote messages */
func
_send_requestvote_f
send_requestvote
;
raft
_send_requestvote_f
send_requestvote
;
/** Callback for sending appendentries messages */
/** Callback for sending appendentries messages */
func
_send_appendentries_f
send_appendentries
;
raft
_send_appendentries_f
send_appendentries
;
/** Callback for sending snapshot messages */
/** Callback for sending snapshot messages */
func
_send_snapshot_f
send_snapshot
;
raft
_send_snapshot_f
send_snapshot
;
/** Callback for loading snapshot. This will be called when we complete
/** Callback for loading snapshot. This will be called when we complete
* receiving snapshot from the leader */
* receiving snapshot from the leader */
func
_load_snapshot_f
load_snapshot
;
raft
_load_snapshot_f
load_snapshot
;
/** Callback to get a chunk of the snapshot file */
/** Callback to get a chunk of the snapshot file */
func
_get_snapshot_chunk_f
get_snapshot_chunk
;
raft
_get_snapshot_chunk_f
get_snapshot_chunk
;
/** Callback to store a chunk of the snapshot */
/** Callback to store a chunk of the snapshot */
func
_store_snapshot_chunk_f
store_snapshot_chunk
;
raft
_store_snapshot_chunk_f
store_snapshot_chunk
;
/** Callback to dismiss temporary file which is used for incoming
/** Callback to dismiss temporary file which is used for incoming
* snapshot chunks */
* snapshot chunks */
func
_clear_snapshot_f
clear_snapshot
;
raft
_clear_snapshot_f
clear_snapshot
;
/** Callback for finite state machine application
/** Callback for finite state machine application
* Return 0 on success.
* Return 0 on success.
* Return RAFT_ERR_SHUTDOWN if you want the server to shutdown. */
* Return RAFT_ERR_SHUTDOWN if you want the server to shutdown. */
func
_logentry_event_f
applylog
;
raft
_logentry_event_f
applylog
;
/** Callback for persisting vote data
/** Callback for persisting vote data
* For safety reasons this callback MUST flush the change to disk. */
* For safety reasons this callback MUST flush the change to disk. */
func
_persist_vote_f
persist_vote
;
raft
_persist_vote_f
persist_vote
;
/** Callback for persisting term (and nil vote) data
/** Callback for persisting term (and nil vote) data
* For safety reasons this callback MUST flush the term and vote changes to
* For safety reasons this callback MUST flush the term and vote changes to
* disk atomically. */
* disk atomically. */
func
_persist_term_f
persist_term
;
raft
_persist_term_f
persist_term
;
/** Callback for determining which node this configuration log entry
/** Callback for determining which node this configuration log entry
* affects. This call only applies to configuration change log entries.
* affects. This call only applies to configuration change log entries.
* @return the node ID of the node */
* @return the node ID of the node */
func
_get_node_id_f
get_node_id
;
raft
_get_node_id_f
get_node_id
;
/** Callback for detecting when a non-voting node has sufficient logs. */
/** Callback for detecting when a non-voting node has sufficient logs. */
func
_node_has_sufficient_logs_f
node_has_sufficient_logs
;
raft
_node_has_sufficient_logs_f
node_has_sufficient_logs
;
/** Callback for being notified of membership changes (optional). */
/** Callback for being notified of membership changes (optional). */
func
_membership_event_f
notify_membership_event
;
raft
_membership_event_f
notify_membership_event
;
/** Callback for being notified of state changes (optional). */
/** Callback for being notified of state changes (optional). */
func
_state_event_f
notify_state_event
;
raft
_state_event_f
notify_state_event
;
/** Callbakc for notified of transfer leadership events (optional) */
/** Callbakc for notified of transfer leadership events (optional) */
func
_transfer_event_f
notify_transfer_event
;
raft
_transfer_event_f
notify_transfer_event
;
/** Callback for catching debugging log messages
/** Callback for catching debugging log messages
* This callback is optional */
* This callback is optional */
func
_log_f
log
;
raft
_log_f
log
;
/** Callback for sending TimeoutNow RPC messages to nodes */
/** Callback for sending TimeoutNow RPC messages to nodes */
func
_send_timeoutnow_f
send_timeoutnow
;
raft
_send_timeoutnow_f
send_timeoutnow
;
/** Callback for deciding whether to send
msg
_appendentries to a node. */
/** Callback for deciding whether to send
raft
_appendentries
_req
to a node. */
func
_backpressure_f
backpressure
;
raft
_backpressure_f
backpressure
;
}
raft_cbs_t
;
}
raft_cbs_t
;
/** A generic notification callback used to allow Raft to notify caller
/** A generic notification callback used to allow Raft to notify caller
...
@@ -710,7 +710,7 @@ typedef struct
...
@@ -710,7 +710,7 @@ typedef struct
* log operation until it returns.
* log operation until it returns.
*/
*/
typedef
void
(
typedef
void
(
*
func
_entry_notify_f
*
raft
_entry_notify_f
)
(
)
(
void
*
arg
,
void
*
arg
,
raft_entry_t
*
entry
,
raft_entry_t
*
entry
,
...
@@ -725,7 +725,7 @@ typedef void (
...
@@ -725,7 +725,7 @@ typedef void (
* arriving to a non leader.
* arriving to a non leader.
*/
*/
typedef
void
(
typedef
void
(
*
func
_read_request_callback_f
*
raft
_read_request_callback_f
)
(
)
(
void
*
arg
,
void
*
arg
,
int
can_read
int
can_read
...
@@ -827,7 +827,7 @@ typedef struct raft_log_impl
...
@@ -827,7 +827,7 @@ typedef struct raft_log_impl
* 0 on success;
* 0 on success;
* -1 on error.
* -1 on error.
*/
*/
int
(
*
pop
)
(
void
*
log
,
raft_index_t
from_idx
,
func
_entry_notify_f
cb
,
void
*
cb_arg
);
int
(
*
pop
)
(
void
*
log
,
raft_index_t
from_idx
,
raft
_entry_notify_f
cb
,
void
*
cb_arg
);
/** Get a single entry from the log.
/** Get a single entry from the log.
*
*
...
@@ -977,26 +977,26 @@ int raft_periodic(raft_server_t* me, int msec_elapsed);
...
@@ -977,26 +977,26 @@ int raft_periodic(raft_server_t* me, int msec_elapsed);
* included entries.
* included entries.
*
*
* @param[in] node The node who sent us this message
* @param[in] node The node who sent us this message
* @param[in]
ae
The appendentries message
* @param[in]
req
The appendentries message
* @param[out] r The resulting response
* @param[out] r
esp
The resulting response
* @return
* @return
* 0 on success
* 0 on success
* */
* */
int
raft_recv_appendentries
(
raft_server_t
*
me
,
int
raft_recv_appendentries
(
raft_server_t
*
me
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_appendentries_
t
*
ae
,
raft
_appendentries_
req_t
*
req
,
msg
_appendentries_resp
onse_t
*
r
);
raft
_appendentries_resp
_t
*
resp
);
/** Receive a response from an appendentries message we sent.
/** Receive a response from an appendentries message we sent.
* @param[in] node The node who sent us this message
* @param[in] node The node who sent us this message
* @param[in] r The appendentries response message
* @param[in] r
esp
The appendentries response message
* @return
* @return
* 0 on success;
* 0 on success;
* -1 on error;
* -1 on error;
* RAFT_ERR_NOT_LEADER server is not the leader */
* RAFT_ERR_NOT_LEADER server is not the leader */
int
raft_recv_appendentries_response
(
raft_server_t
*
me
,
int
raft_recv_appendentries_response
(
raft_server_t
*
me
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_appendentries_resp
onse
_t
*
r
);
raft
_appendentries_resp_t
*
r
esp
);
/** Receive a snapshot message.
/** Receive a snapshot message.
* @param[in] node The node who sent us this message
* @param[in] node The node who sent us this message
...
@@ -1006,39 +1006,39 @@ int raft_recv_appendentries_response(raft_server_t* me,
...
@@ -1006,39 +1006,39 @@ int raft_recv_appendentries_response(raft_server_t* me,
* 0 on success */
* 0 on success */
int
raft_recv_snapshot
(
raft_server_t
*
me
,
int
raft_recv_snapshot
(
raft_server_t
*
me
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_snapshot_t
*
req
,
raft
_snapshot_
req_
t
*
req
,
msg
_snapshot_resp
onse
_t
*
resp
);
raft
_snapshot_resp_t
*
resp
);
/** Receive a response from a snapshot message we sent.
/** Receive a response from a snapshot message we sent.
* @param[in] node The node who sent us this message
* @param[in] node The node who sent us this message
* @param[in] r The snapshot response message
* @param[in] r
esp
The snapshot response message
* @return
* @return
* 0 on success;
* 0 on success;
* -1 on error;
* -1 on error;
* RAFT_ERR_NOT_LEADER server is not the leader */
* RAFT_ERR_NOT_LEADER server is not the leader */
int
raft_recv_snapshot_response
(
raft_server_t
*
me
,
int
raft_recv_snapshot_response
(
raft_server_t
*
me
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_snapshot_resp
onse
_t
*
r
);
raft
_snapshot_resp_t
*
r
esp
);
/** Receive a requestvote message.
/** Receive a requestvote message.
* @param[in] node The node who sent us this message
* @param[in] node The node who sent us this message
* @param[in]
v
r The requestvote message
* @param[in] r
eq
The requestvote message
* @param[out] r The resulting response
* @param[out] r
esp
The resulting response
* @return 0 on success */
* @return 0 on success */
int
raft_recv_requestvote
(
raft_server_t
*
me
,
int
raft_recv_requestvote
(
raft_server_t
*
me
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_requestvote_
t
*
vr
,
raft
_requestvote_
req_t
*
req
,
msg
_requestvote_resp
onse_t
*
r
);
raft
_requestvote_resp
_t
*
resp
);
/** Receive a response from a requestvote message we sent.
/** Receive a response from a requestvote message we sent.
* @param[in] node The node this response was sent by
* @param[in] node The node this response was sent by
* @param[in] r The requestvote response message
* @param[in] r
eq
The requestvote response message
* @return
* @return
* 0 on success;
* 0 on success;
* RAFT_ERR_SHUTDOWN server MUST shutdown; */
* RAFT_ERR_SHUTDOWN server MUST shutdown; */
int
raft_recv_requestvote_response
(
raft_server_t
*
me
,
int
raft_recv_requestvote_response
(
raft_server_t
*
me
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_requestvote_resp
onse
_t
*
r
);
raft
_requestvote_resp_t
*
r
eq
);
/** Receive an entry message from the client.
/** Receive an entry message from the client.
*
*
...
@@ -1055,8 +1055,8 @@ int raft_recv_requestvote_response(raft_server_t* me,
...
@@ -1055,8 +1055,8 @@ int raft_recv_requestvote_response(raft_server_t* me,
* </ul>
* </ul>
*
*
* @param[in] node The node who sent us this message
* @param[in] node The node who sent us this message
* @param[in]
ety
The entry message
* @param[in]
req
The entry message
* @param[out] r The resulting response
* @param[out] r
esp
The resulting response
* @return
* @return
* 0 on success;
* 0 on success;
* RAFT_ERR_NOT_LEADER server is not the leader;
* RAFT_ERR_NOT_LEADER server is not the leader;
...
@@ -1065,8 +1065,8 @@ int raft_recv_requestvote_response(raft_server_t* me,
...
@@ -1065,8 +1065,8 @@ int raft_recv_requestvote_response(raft_server_t* me,
* RAFT_ERR_NOMEM memory allocation failure
* RAFT_ERR_NOMEM memory allocation failure
*/
*/
int
raft_recv_entry
(
raft_server_t
*
me
,
int
raft_recv_entry
(
raft_server_t
*
me
,
msg
_entry_
t
*
ety
,
raft
_entry_
req_t
*
req
,
msg
_entry_resp
onse
_t
*
r
);
raft
_entry_resp_t
*
r
esp
);
/**
/**
* @return server's node ID; -1 if it doesn't know what it is */
* @return server's node ID; -1 if it doesn't know what it is */
...
@@ -1239,7 +1239,7 @@ int raft_pop_entry(raft_server_t* me);
...
@@ -1239,7 +1239,7 @@ int raft_pop_entry(raft_server_t* me);
/** Confirm if a msg_entry_response has been committed.
/** Confirm if a msg_entry_response has been committed.
* @param[in] r The response we want to check */
* @param[in] r The response we want to check */
int
raft_msg_entry_response_committed
(
raft_server_t
*
me
,
int
raft_msg_entry_response_committed
(
raft_server_t
*
me
,
const
msg
_entry_resp
onse
_t
*
r
);
const
raft
_entry_resp_t
*
r
);
/** Get node's ID.
/** Get node's ID.
* @return ID of node */
* @return ID of node */
...
@@ -1445,7 +1445,7 @@ typedef struct {
...
@@ -1445,7 +1445,7 @@ typedef struct {
* Return 0 on success.
* Return 0 on success.
* Return RAFT_ERR_SHUTDOWN if you want the server to shutdown. */
* Return RAFT_ERR_SHUTDOWN if you want the server to shutdown. */
func
_logentry_event_f
log_offer
;
raft
_logentry_event_f
log_offer
;
/** Callback for removing the oldest entry from the log
/** Callback for removing the oldest entry from the log
* For safety reasons this callback MUST flush the change to disk.
* For safety reasons this callback MUST flush the change to disk.
...
@@ -1454,7 +1454,7 @@ typedef struct {
...
@@ -1454,7 +1454,7 @@ typedef struct {
* desired after the callback returns, raft_entry_hold() should be
* desired after the callback returns, raft_entry_hold() should be
* used.
* used.
*/
*/
func
_logentry_event_f
log_poll
;
raft
_logentry_event_f
log_poll
;
/** Callback for removing the youngest entry from the log
/** Callback for removing the youngest entry from the log
* For safety reasons this callback MUST flush the change to disk.
* For safety reasons this callback MUST flush the change to disk.
...
@@ -1463,13 +1463,13 @@ typedef struct {
...
@@ -1463,13 +1463,13 @@ typedef struct {
* desired after the callback returns, raft_entry_hold() should be
* desired after the callback returns, raft_entry_hold() should be
* used.
* used.
*/
*/
func
_logentry_event_f
log_pop
;
raft
_logentry_event_f
log_pop
;
/** Callback called for every existing log entry when clearing the log.
/** Callback called for every existing log entry when clearing the log.
* If memory was malloc'd in log_offer and the entry doesn't get a chance
* If memory was malloc'd in log_offer and the entry doesn't get a chance
* to go through log_poll or log_pop, this is the last chance to free it.
* to go through log_poll or log_pop, this is the last chance to free it.
*/
*/
func
_logentry_event_f
log_clear
;
raft
_logentry_event_f
log_clear
;
}
raft_log_cbs_t
;
}
raft_log_cbs_t
;
/** Allocate a new Raft Log entry.
/** Allocate a new Raft Log entry.
...
@@ -1511,7 +1511,7 @@ extern const raft_log_impl_t raft_log_internal_impl;
...
@@ -1511,7 +1511,7 @@ extern const raft_log_impl_t raft_log_internal_impl;
void
raft_handle_append_cfg_change
(
raft_server_t
*
me
,
raft_entry_t
*
ety
,
raft_index_t
idx
);
void
raft_handle_append_cfg_change
(
raft_server_t
*
me
,
raft_entry_t
*
ety
,
raft_index_t
idx
);
int
raft_queue_read_request
(
raft_server_t
*
me
,
func
_read_request_callback_f
cb
,
void
*
cb_arg
);
int
raft_queue_read_request
(
raft_server_t
*
me
,
raft
_read_request_callback_f
cb
,
void
*
cb_arg
);
/** Attempt to process read queue.
/** Attempt to process read queue.
*/
*/
...
...
include/raft_private.h
View file @
8ee3f264
...
@@ -19,7 +19,7 @@ typedef struct raft_read_request {
...
@@ -19,7 +19,7 @@ typedef struct raft_read_request {
raft_term_t
read_term
;
raft_term_t
read_term
;
raft_msg_id_t
msg_id
;
raft_msg_id_t
msg_id
;
func
_read_request_callback_f
cb
;
raft
_read_request_callback_f
cb
;
void
*
cb_arg
;
void
*
cb_arg
;
struct
raft_read_request
*
next
;
struct
raft_read_request
*
next
;
...
...
src/raft_log.c
View file @
8ee3f264
...
@@ -208,7 +208,7 @@ raft_index_t raft_log_count(raft_log_t *me)
...
@@ -208,7 +208,7 @@ raft_index_t raft_log_count(raft_log_t *me)
return
me
->
count
;
return
me
->
count
;
}
}
static
int
log_delete
(
raft_log_t
*
me
,
raft_index_t
idx
,
func
_entry_notify_f
cb
,
void
*
cb_arg
)
static
int
log_delete
(
raft_log_t
*
me
,
raft_index_t
idx
,
raft
_entry_notify_f
cb
,
void
*
cb_arg
)
{
{
if
(
0
==
idx
)
if
(
0
==
idx
)
return
-
1
;
return
-
1
;
...
@@ -376,7 +376,7 @@ static int log_get_batch(void *log, raft_index_t idx, int entries_n, raft_entry_
...
@@ -376,7 +376,7 @@ static int log_get_batch(void *log, raft_index_t idx, int entries_n, raft_entry_
return
(
int
)
n
;
return
(
int
)
n
;
}
}
static
int
log_pop
(
void
*
log
,
raft_index_t
from_idx
,
func
_entry_notify_f
cb
,
void
*
cb_arg
)
static
int
log_pop
(
void
*
log
,
raft_index_t
from_idx
,
raft
_entry_notify_f
cb
,
void
*
cb_arg
)
{
{
return
log_delete
(
log
,
from_idx
,
cb
,
cb_arg
);
return
log_delete
(
log
,
from_idx
,
cb
,
cb_arg
);
}
}
...
...
src/raft_server.c
View file @
8ee3f264
...
@@ -349,7 +349,7 @@ int raft_delete_entry_from_idx(raft_server_t* me, raft_index_t idx)
...
@@ -349,7 +349,7 @@ int raft_delete_entry_from_idx(raft_server_t* me, raft_index_t idx)
me
->
voting_cfg_change_log_idx
=
-
1
;
me
->
voting_cfg_change_log_idx
=
-
1
;
int
e
=
me
->
log_impl
->
pop
(
me
->
log
,
idx
,
int
e
=
me
->
log_impl
->
pop
(
me
->
log
,
idx
,
(
func
_entry_notify_f
)
raft_handle_remove_cfg_change
,
me
);
(
raft
_entry_notify_f
)
raft_handle_remove_cfg_change
,
me
);
if
(
e
!=
0
)
if
(
e
!=
0
)
return
e
;
return
e
;
...
@@ -643,7 +643,7 @@ int raft_voting_change_is_in_progress(raft_server_t* me)
...
@@ -643,7 +643,7 @@ int raft_voting_change_is_in_progress(raft_server_t* me)
int
raft_recv_appendentries_response
(
raft_server_t
*
me
,
int
raft_recv_appendentries_response
(
raft_server_t
*
me
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_appendentries_resp
onse
_t
*
r
)
raft
_appendentries_resp_t
*
r
)
{
{
raft_log_node
(
me
,
raft_node_get_id
(
node
),
raft_log_node
(
me
,
raft_node_get_id
(
node
),
"received appendentries response %s ci:%ld rci:%ld msgid:%lu"
,
"received appendentries response %s ci:%ld rci:%ld msgid:%lu"
,
...
@@ -755,12 +755,10 @@ static int raft_receive_term(raft_server_t* me, raft_term_t term)
...
@@ -755,12 +755,10 @@ static int raft_receive_term(raft_server_t* me, raft_term_t term)
return
0
;
return
0
;
}
}
int
raft_recv_appendentries
(
int
raft_recv_appendentries
(
raft_server_t
*
me
,
raft_server_t
*
me
,
raft_node_t
*
node
,
raft_node_t
*
node
,
raft_appendentries_req_t
*
ae
,
msg_appendentries_t
*
ae
,
raft_appendentries_resp_t
*
r
)
msg_appendentries_response_t
*
r
)
{
{
int
e
=
0
;
int
e
=
0
;
...
@@ -926,8 +924,8 @@ out:
...
@@ -926,8 +924,8 @@ out:
int
raft_recv_requestvote
(
raft_server_t
*
me
,
int
raft_recv_requestvote
(
raft_server_t
*
me
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_requestvote_t
*
vr
,
raft
_requestvote_
req_
t
*
vr
,
msg
_requestvote_resp
onse_t
*
r
)
raft
_requestvote_resp
_t
*
r
)
{
{
(
void
)
node
;
(
void
)
node
;
int
e
=
0
;
int
e
=
0
;
...
@@ -1011,7 +1009,7 @@ int raft_votes_is_majority(const int num_nodes, const int nvotes)
...
@@ -1011,7 +1009,7 @@ int raft_votes_is_majority(const int num_nodes, const int nvotes)
int
raft_recv_requestvote_response
(
raft_server_t
*
me
,
int
raft_recv_requestvote_response
(
raft_server_t
*
me
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_requestvote_resp
onse
_t
*
r
)
raft
_requestvote_resp_t
*
r
)
{
{
raft_log_node
(
me
,
raft_node_get_id
(
node
),
raft_log_node
(
me
,
raft_node_get_id
(
node
),
"node responded to requestvote status:%s pv:%d rt:%ld ct:%ld rt:%ld"
,
"node responded to requestvote status:%s pv:%d rt:%ld ct:%ld rt:%ld"
,
...
@@ -1062,8 +1060,8 @@ int raft_recv_requestvote_response(raft_server_t* me,
...
@@ -1062,8 +1060,8 @@ int raft_recv_requestvote_response(raft_server_t* me,
}
}
int
raft_recv_entry
(
raft_server_t
*
me
,
int
raft_recv_entry
(
raft_server_t
*
me
,
msg
_entry_t
*
ety
,
raft
_entry_
req_
t
*
ety
,
msg
_entry_resp
onse_t
*
r
)
raft
_entry_resp
_t
*
r
)
{
{
if
(
raft_entry_is_voting_cfg_change
(
ety
))
if
(
raft_entry_is_voting_cfg_change
(
ety
))
{
{
...
@@ -1108,7 +1106,7 @@ int raft_recv_entry(raft_server_t* me,
...
@@ -1108,7 +1106,7 @@ int raft_recv_entry(raft_server_t* me,
int
raft_send_requestvote
(
raft_server_t
*
me
,
raft_node_t
*
node
)
int
raft_send_requestvote
(
raft_server_t
*
me
,
raft_node_t
*
node
)
{
{
msg
_requestvote_t
rv
;
raft
_requestvote_
req_
t
rv
;
int
e
=
0
;
int
e
=
0
;
assert
(
node
);
assert
(
node
);
...
@@ -1254,7 +1252,7 @@ int raft_send_snapshot(raft_server_t* me, raft_node_t* node)
...
@@ -1254,7 +1252,7 @@ int raft_send_snapshot(raft_server_t* me, raft_node_t* node)
while
(
1
)
{
while
(
1
)
{
raft_size_t
offset
=
raft_node_get_snapshot_offset
(
node
);
raft_size_t
offset
=
raft_node_get_snapshot_offset
(
node
);
msg
_snapshot_t
msg
=
{
raft
_snapshot_
req_
t
msg
=
{
.
leader_id
=
raft_get_nodeid
(
me
),
.
leader_id
=
raft_get_nodeid
(
me
),
.
snapshot_index
=
me
->
snapshot_last_idx
,
.
snapshot_index
=
me
->
snapshot_last_idx
,
.
snapshot_term
=
me
->
snapshot_last_term
,
.
snapshot_term
=
me
->
snapshot_last_term
,
...
@@ -1287,8 +1285,8 @@ int raft_send_snapshot(raft_server_t* me, raft_node_t* node)
...
@@ -1287,8 +1285,8 @@ int raft_send_snapshot(raft_server_t* me, raft_node_t* node)
int
raft_recv_snapshot
(
raft_server_t
*
me
,
int
raft_recv_snapshot
(
raft_server_t
*
me
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_snapshot_t
*
req
,
raft
_snapshot_
req_
t
*
req
,
msg
_snapshot_resp
onse
_t
*
resp
)
raft
_snapshot_resp_t
*
resp
)
{
{
int
e
=
0
;
int
e
=
0
;
...
@@ -1379,7 +1377,7 @@ out:
...
@@ -1379,7 +1377,7 @@ out:
int
raft_recv_snapshot_response
(
raft_server_t
*
me
,
int
raft_recv_snapshot_response
(
raft_server_t
*
me
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_snapshot_resp
onse
_t
*
r
)
raft
_snapshot_resp_t
*
r
)
{
{
raft_log_node
(
me
,
raft_node_get_id
(
node
),
raft_log_node
(
me
,
raft_node_get_id
(
node
),
"recv snapshot response: ci:%lu comi:%lu mi:%lu t:%ld o:%llu s:%d lc:%d"
,
"recv snapshot response: ci:%lu comi:%lu mi:%lu t:%ld o:%llu s:%d lc:%d"
,
...
@@ -1456,7 +1454,7 @@ int raft_send_appendentries(raft_server_t* me, raft_node_t* node)
...
@@ -1456,7 +1454,7 @@ int raft_send_appendentries(raft_server_t* me, raft_node_t* node)
}
}
}
}
msg
_appendentries_t
ae
=
{
raft
_appendentries_
req_
t
ae
=
{
.
term
=
me
->
current_term
,
.
term
=
me
->
current_term
,
.
leader_id
=
raft_get_nodeid
(
me
),
.
leader_id
=
raft_get_nodeid
(
me
),
.
leader_commit
=
raft_get_commit_idx
(
me
),
.
leader_commit
=
raft_get_commit_idx
(
me
),
...
@@ -1561,7 +1559,7 @@ int raft_vote_for_nodeid(raft_server_t* me, const raft_node_id_t nodeid)
...
@@ -1561,7 +1559,7 @@ int raft_vote_for_nodeid(raft_server_t* me, const raft_node_id_t nodeid)
}
}
int
raft_msg_entry_response_committed
(
raft_server_t
*
me
,
int
raft_msg_entry_response_committed
(
raft_server_t
*
me
,
const
msg
_entry_resp
onse
_t
*
r
)
const
raft
_entry_resp_t
*
r
)
{
{
raft_entry_t
*
ety
=
raft_get_entry_from_idx
(
me
,
r
->
idx
);
raft_entry_t
*
ety
=
raft_get_entry_from_idx
(
me
,
r
->
idx
);
if
(
!
ety
)
if
(
!
ety
)
...
@@ -1609,7 +1607,7 @@ int raft_pop_entry(raft_server_t* me)
...
@@ -1609,7 +1607,7 @@ int raft_pop_entry(raft_server_t* me)
raft_index_t
cur_idx
=
me
->
log_impl
->
current_idx
(
me
->
log
);
raft_index_t
cur_idx
=
me
->
log_impl
->
current_idx
(
me
->
log
);
int
e
=
me
->
log_impl
->
pop
(
me
->
log
,
cur_idx
,
int
e
=
me
->
log_impl
->
pop
(
me
->
log
,
cur_idx
,
(
func
_entry_notify_f
)
raft_handle_remove_cfg_change
,
me
);
(
raft
_entry_notify_f
)
raft_handle_remove_cfg_change
,
me
);
if
(
e
!=
0
)
if
(
e
!=
0
)
return
e
;
return
e
;
...
@@ -1850,7 +1848,7 @@ void raft_entry_release_list(raft_entry_t **ety_list, size_t len)
...
@@ -1850,7 +1848,7 @@ void raft_entry_release_list(raft_entry_t **ety_list, size_t len)
}
}
}
}
int
raft_queue_read_request
(
raft_server_t
*
me
,
func
_read_request_callback_f
cb
,
void
*
cb_arg
)
int
raft_queue_read_request
(
raft_server_t
*
me
,
raft
_read_request_callback_f
cb
,
void
*
cb_arg
)
{
{
raft_read_request_t
*
req
=
raft_malloc
(
sizeof
(
raft_read_request_t
));
raft_read_request_t
*
req
=
raft_malloc
(
sizeof
(
raft_read_request_t
));
...
...
tests/mock_send_functions.c
View file @
8ee3f264
...
@@ -74,33 +74,35 @@ static int __append_msg(
...
@@ -74,33 +74,35 @@ static int __append_msg(
}
}
int
sender_requestvote
(
raft_server_t
*
raft
,
int
sender_requestvote
(
raft_server_t
*
raft
,
void
*
udata
,
raft_node_t
*
node
,
msg_requestvote_t
*
msg
)
void
*
udata
,
raft_node_t
*
node
,
raft_requestvote_req_t
*
msg
)
{
{
return
__append_msg
(
udata
,
msg
,
RAFT_
MSG_
REQUESTVOTE
,
sizeof
(
*
msg
),
node
,
return
__append_msg
(
udata
,
msg
,
RAFT_REQUESTVOTE
_REQ
,
sizeof
(
*
msg
),
node
,
raft
);
raft
);
}
}
int
sender_requestvote_response
(
raft_server_t
*
raft
,
int
sender_requestvote_response
(
raft_server_t
*
raft
,
void
*
udata
,
raft_node_t
*
node
,
void
*
udata
,
raft_node_t
*
node
,
msg
_requestvote_resp
onse
_t
*
msg
)
raft
_requestvote_resp_t
*
msg
)
{
{
return
__append_msg
(
udata
,
msg
,
RAFT_
MSG_
REQUESTVOTE_RESP
ONSE
,
sizeof
(
*
msg
),
return
__append_msg
(
udata
,
msg
,
RAFT_REQUESTVOTE_RESP
,
sizeof
(
*
msg
),
node
,
raft
);
node
,
raft
);
}
}
int
sender_appendentries
(
raft_server_t
*
raft
,
int
sender_appendentries
(
raft_server_t
*
raft
,
void
*
udata
,
raft_node_t
*
node
,
msg_appendentries_t
*
msg
)
void
*
udata
,
raft_node_t
*
node
,
raft_appendentries_req_t
*
msg
)
{
{
msg
_entry_t
**
entries
=
calloc
(
1
,
sizeof
(
msg
_entry_t
*
)
*
msg
->
n_entries
);
raft
_entry_
req_
t
**
entries
=
calloc
(
1
,
sizeof
(
raft
_entry_
req_
t
*
)
*
msg
->
n_entries
);
int
i
;
int
i
;
for
(
i
=
0
;
i
<
msg
->
n_entries
;
i
++
)
{
for
(
i
=
0
;
i
<
msg
->
n_entries
;
i
++
)
{
entries
[
i
]
=
msg
->
entries
[
i
];
entries
[
i
]
=
msg
->
entries
[
i
];
raft_entry_hold
(
entries
[
i
]);
raft_entry_hold
(
entries
[
i
]);
}
}
msg
_entry_t
**
old_entries
=
msg
->
entries
;
raft
_entry_
req_
t
**
old_entries
=
msg
->
entries
;
msg
->
entries
=
entries
;
msg
->
entries
=
entries
;
int
ret
=
__append_msg
(
udata
,
msg
,
RAFT_
MSG_
APPENDENTRIES
,
sizeof
(
*
msg
),
node
,
int
ret
=
__append_msg
(
udata
,
msg
,
RAFT_APPENDENTRIES
_REQ
,
sizeof
(
*
msg
),
node
,
raft
);
raft
);
msg
->
entries
=
old_entries
;
msg
->
entries
=
old_entries
;
return
ret
;
return
ret
;
...
@@ -108,17 +110,17 @@ int sender_appendentries(raft_server_t* raft,
...
@@ -108,17 +110,17 @@ int sender_appendentries(raft_server_t* raft,
int
sender_appendentries_response
(
raft_server_t
*
raft
,
int
sender_appendentries_response
(
raft_server_t
*
raft
,
void
*
udata
,
raft_node_t
*
node
,
void
*
udata
,
raft_node_t
*
node
,
msg
_appendentries_resp
onse
_t
*
msg
)
raft
_appendentries_resp_t
*
msg
)
{
{
return
__append_msg
(
udata
,
msg
,
RAFT_
MSG_
APPENDENTRIES_RESP
ONSE
,
return
__append_msg
(
udata
,
msg
,
RAFT_APPENDENTRIES_RESP
,
sizeof
(
*
msg
),
node
,
raft
);
sizeof
(
*
msg
),
node
,
raft
);
}
}
int
sender_entries_response
(
raft_server_t
*
raft
,
int
sender_entries_response
(
raft_server_t
*
raft
,
void
*
udata
,
raft_node_t
*
node
,
msg_entry_response_t
*
msg
)
void
*
udata
,
raft_node_t
*
node
,
raft_entry_resp_t
*
msg
)
{
{
return
__append_msg
(
udata
,
msg
,
RAFT_MSG_ENTRY_RESPONSE
,
sizeof
(
*
msg
),
node
,
return
__append_msg
(
udata
,
msg
,
RAFT_ENTRY_RESP
,
sizeof
(
*
msg
),
node
,
raft
);
raft
);
}
}
void
*
sender_new
(
void
*
address
)
void
*
sender_new
(
void
*
address
)
...
@@ -160,38 +162,38 @@ void sender_poll_msgs(void* s)
...
@@ -160,38 +162,38 @@ void sender_poll_msgs(void* s)
{
{
switch
(
m
->
type
)
switch
(
m
->
type
)
{
{
case
RAFT_
MSG_
APPENDENTRIES
:
case
RAFT_APPENDENTRIES
_REQ
:
{
{
msg
_appendentries_resp
onse
_t
response
;
raft
_appendentries_resp_t
response
;
raft_recv_appendentries
(
me
->
raft
,
m
->
sender
,
m
->
data
,
&
response
);
raft_recv_appendentries
(
me
->
raft
,
m
->
sender
,
m
->
data
,
&
response
);
__append_msg
(
me
,
&
response
,
RAFT_
MSG_
APPENDENTRIES_RESP
ONSE
,
__append_msg
(
me
,
&
response
,
RAFT_APPENDENTRIES_RESP
,
sizeof
(
response
),
m
->
sender
,
me
->
raft
);
sizeof
(
response
),
m
->
sender
,
me
->
raft
);
}
}
break
;
break
;
case
RAFT_
MSG_
APPENDENTRIES_RESP
ONSE
:
case
RAFT_APPENDENTRIES_RESP
:
raft_recv_appendentries_response
(
me
->
raft
,
m
->
sender
,
m
->
data
);
raft_recv_appendentries_response
(
me
->
raft
,
m
->
sender
,
m
->
data
);
break
;
break
;
case
RAFT_
MSG_
REQUESTVOTE
:
case
RAFT_REQUESTVOTE
_REQ
:
{
{
msg
_requestvote_resp
onse
_t
response
;
raft
_requestvote_resp_t
response
;
raft_recv_requestvote
(
me
->
raft
,
m
->
sender
,
m
->
data
,
&
response
);
raft_recv_requestvote
(
me
->
raft
,
m
->
sender
,
m
->
data
,
&
response
);
__append_msg
(
me
,
&
response
,
RAFT_
MSG_
REQUESTVOTE_RESP
ONSE
,
__append_msg
(
me
,
&
response
,
RAFT_REQUESTVOTE_RESP
,
sizeof
(
response
),
m
->
sender
,
me
->
raft
);
sizeof
(
response
),
m
->
sender
,
me
->
raft
);
}
}
break
;
break
;
case
RAFT_
MSG_
REQUESTVOTE_RESP
ONSE
:
case
RAFT_REQUESTVOTE_RESP
:
raft_recv_requestvote_response
(
me
->
raft
,
m
->
sender
,
m
->
data
);
raft_recv_requestvote_response
(
me
->
raft
,
m
->
sender
,
m
->
data
);
break
;
break
;
case
RAFT_
MSG_
ENTRY
:
case
RAFT_ENTRY
_REQ
:
{
{
msg
_entry_resp
onse
_t
response
;
raft
_entry_resp_t
response
;
raft_recv_entry
(
me
->
raft
,
m
->
data
,
&
response
);
raft_recv_entry
(
me
->
raft
,
m
->
data
,
&
response
);
__append_msg
(
me
,
&
response
,
RAFT_
MSG_
ENTRY_RESP
ONSE
,
__append_msg
(
me
,
&
response
,
RAFT_ENTRY_RESP
,
sizeof
(
response
),
m
->
sender
,
me
->
raft
);
sizeof
(
response
),
m
->
sender
,
me
->
raft
);
}
}
break
;
break
;
case
RAFT_
MSG_
ENTRY_RESP
ONSE
:
case
RAFT_ENTRY_RESP
:
#if 0
#if 0
raft_recv_entry_response(me->raft, m->sender, m->data);
raft_recv_entry_response(me->raft, m->sender, m->data);
#endif
#endif
...
...
tests/mock_send_functions.h
View file @
8ee3f264
...
@@ -3,12 +3,12 @@
...
@@ -3,12 +3,12 @@
typedef
enum
typedef
enum
{
{
RAFT_
MSG_
REQUESTVOTE
,
RAFT_REQUESTVOTE
_REQ
,
RAFT_
MSG_
REQUESTVOTE_RESP
ONSE
,
RAFT_REQUESTVOTE_RESP
,
RAFT_
MSG_
APPENDENTRIES
,
RAFT_APPENDENTRIES
_REQ
,
RAFT_
MSG_
APPENDENTRIES_RESP
ONSE
,
RAFT_APPENDENTRIES_RESP
,
RAFT_
MSG_
ENTRY
,
RAFT_ENTRY
_REQ
,
RAFT_
MSG_
ENTRY_RESP
ONSE
,
RAFT_ENTRY_RESP
,
}
raft_message_type_e
;
}
raft_message_type_e
;
void
senders_new
();
void
senders_new
();
...
@@ -24,21 +24,21 @@ int sender_msgs_available(void* s);
...
@@ -24,21 +24,21 @@ int sender_msgs_available(void* s);
void
sender_set_raft
(
void
*
s
,
void
*
r
);
void
sender_set_raft
(
void
*
s
,
void
*
r
);
int
sender_requestvote
(
raft_server_t
*
raft
,
int
sender_requestvote
(
raft_server_t
*
raft
,
void
*
udata
,
raft_node_t
*
node
,
msg
_requestvote_t
*
msg
);
void
*
udata
,
raft_node_t
*
node
,
raft
_requestvote_
req_
t
*
msg
);
int
sender_requestvote_response
(
raft_server_t
*
raft
,
int
sender_requestvote_response
(
raft_server_t
*
raft
,
void
*
udata
,
raft_node_t
*
node
,
msg
_requestvote_resp
onse
_t
*
msg
);
void
*
udata
,
raft_node_t
*
node
,
raft
_requestvote_resp_t
*
msg
);
int
sender_appendentries
(
raft_server_t
*
raft
,
int
sender_appendentries
(
raft_server_t
*
raft
,
void
*
udata
,
raft_node_t
*
node
,
msg
_appendentries_t
*
msg
);
void
*
udata
,
raft_node_t
*
node
,
raft
_appendentries_
req_
t
*
msg
);
int
sender_appendentries_response
(
raft_server_t
*
raft
,
int
sender_appendentries_response
(
raft_server_t
*
raft
,
void
*
udata
,
raft_node_t
*
node
,
msg
_appendentries_resp
onse
_t
*
msg
);
void
*
udata
,
raft_node_t
*
node
,
raft
_appendentries_resp_t
*
msg
);
int
sender_entries
(
raft_server_t
*
raft
,
int
sender_entries
(
raft_server_t
*
raft
,
void
*
udata
,
raft_node_t
*
node
,
msg
_entry_t
*
msg
);
void
*
udata
,
raft_node_t
*
node
,
raft
_entry_
req_
t
*
msg
);
int
sender_entries_response
(
raft_server_t
*
raft
,
int
sender_entries_response
(
raft_server_t
*
raft
,
void
*
udata
,
raft_node_t
*
node
,
msg
_entry_resp
onse
_t
*
msg
);
void
*
udata
,
raft_node_t
*
node
,
raft
_entry_resp_t
*
msg
);
#endif
/* MOCK_SEND_FUNCTIONS_H */
#endif
/* MOCK_SEND_FUNCTIONS_H */
tests/test_server.c
View file @
8ee3f264
...
@@ -57,7 +57,7 @@ int __raft_applylog_shutdown(
...
@@ -57,7 +57,7 @@ int __raft_applylog_shutdown(
int
__raft_send_requestvote
(
raft_server_t
*
raft
,
int
__raft_send_requestvote
(
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_requestvote_
t
*
msg
)
raft
_requestvote_
req_t
*
msg
)
{
{
return
0
;
return
0
;
}
}
...
@@ -65,7 +65,7 @@ int __raft_send_requestvote(raft_server_t* raft,
...
@@ -65,7 +65,7 @@ int __raft_send_requestvote(raft_server_t* raft,
static
int
__raft_send_appendentries
(
raft_server_t
*
raft
,
static
int
__raft_send_appendentries
(
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_appendentries_
t
*
msg
)
raft
_appendentries_
req_t
*
msg
)
{
{
return
0
;
return
0
;
}
}
...
@@ -566,10 +566,10 @@ void TestRaft_server_recv_entry_auto_commits_if_we_are_the_only_node(CuTest * tc
...
@@ -566,10 +566,10 @@ void TestRaft_server_recv_entry_auto_commits_if_we_are_the_only_node(CuTest * tc
CuAssertTrue
(
tc
,
0
==
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_commit_idx
(
r
));
/* entry message */
/* entry message */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_recv_entry
(
r
,
ety
,
&
cr
);
raft_recv_entry
(
r
,
ety
,
&
cr
);
CuAssertTrue
(
tc
,
1
==
raft_get_log_count
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_log_count
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_commit_idx
(
r
));
...
@@ -585,11 +585,11 @@ void TestRaft_server_recv_entry_fails_if_there_is_already_a_voting_change(CuTest
...
@@ -585,11 +585,11 @@ void TestRaft_server_recv_entry_fails_if_there_is_already_a_voting_change(CuTest
CuAssertTrue
(
tc
,
0
==
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_commit_idx
(
r
));
/* entry message */
/* entry message */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
ety
->
type
=
RAFT_LOGTYPE_ADD_NODE
;
ety
->
type
=
RAFT_LOGTYPE_ADD_NODE
;
/* receive entry */
/* receive entry */
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
CuAssertTrue
(
tc
,
0
==
raft_recv_entry
(
r
,
ety
,
&
cr
));
CuAssertTrue
(
tc
,
0
==
raft_recv_entry
(
r
,
ety
,
&
cr
));
CuAssertTrue
(
tc
,
1
==
raft_get_log_count
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_log_count
(
r
));
...
@@ -659,8 +659,8 @@ void TestRaft_server_recv_requestvote_response_dont_increase_votes_for_me_when_n
...
@@ -659,8 +659,8 @@ void TestRaft_server_recv_requestvote_response_dont_increase_votes_for_me_when_n
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
CuAssertTrue
(
tc
,
1
==
raft_get_nvotes_for_me
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_nvotes_for_me
(
r
));
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
memset
(
&
rvr
,
0
,
sizeof
(
msg
_requestvote_resp
onse
_t
));
memset
(
&
rvr
,
0
,
sizeof
(
raft
_requestvote_resp_t
));
rvr
.
term
=
1
;
rvr
.
term
=
1
;
rvr
.
vote_granted
=
0
;
rvr
.
vote_granted
=
0
;
int
e
=
raft_recv_requestvote_response
(
r
,
raft_get_node
(
r
,
2
),
&
rvr
);
int
e
=
raft_recv_requestvote_response
(
r
,
raft_get_node
(
r
,
2
),
&
rvr
);
...
@@ -685,8 +685,8 @@ void TestRaft_server_recv_requestvote_response_dont_increase_votes_for_me_when_t
...
@@ -685,8 +685,8 @@ void TestRaft_server_recv_requestvote_response_dont_increase_votes_for_me_when_t
raft_set_current_term
(
r
,
3
);
raft_set_current_term
(
r
,
3
);
CuAssertTrue
(
tc
,
1
==
raft_get_nvotes_for_me
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_nvotes_for_me
(
r
));
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
memset
(
&
rvr
,
0
,
sizeof
(
msg
_requestvote_resp
onse
_t
));
memset
(
&
rvr
,
0
,
sizeof
(
raft
_requestvote_resp_t
));
rvr
.
term
=
2
;
rvr
.
term
=
2
;
rvr
.
vote_granted
=
1
;
rvr
.
vote_granted
=
1
;
raft_recv_requestvote_response
(
r
,
raft_get_node
(
r
,
2
),
&
rvr
);
raft_recv_requestvote_response
(
r
,
raft_get_node
(
r
,
2
),
&
rvr
);
...
@@ -717,8 +717,8 @@ void TestRaft_server_recv_requestvote_response_increase_votes_for_me(
...
@@ -717,8 +717,8 @@ void TestRaft_server_recv_requestvote_response_increase_votes_for_me(
CuAssertIntEquals
(
tc
,
2
,
raft_get_current_term
(
r
));
CuAssertIntEquals
(
tc
,
2
,
raft_get_current_term
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_nvotes_for_me
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_nvotes_for_me
(
r
));
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
memset
(
&
rvr
,
0
,
sizeof
(
msg
_requestvote_resp
onse
_t
));
memset
(
&
rvr
,
0
,
sizeof
(
raft
_requestvote_resp_t
));
rvr
.
request_term
=
2
;
rvr
.
request_term
=
2
;
rvr
.
term
=
2
;
rvr
.
term
=
2
;
rvr
.
vote_granted
=
1
;
rvr
.
vote_granted
=
1
;
...
@@ -747,8 +747,8 @@ void TestRaft_server_recv_requestvote_response_must_be_candidate_to_receive(
...
@@ -747,8 +747,8 @@ void TestRaft_server_recv_requestvote_response_must_be_candidate_to_receive(
raft_become_leader
(
r
);
raft_become_leader
(
r
);
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
memset
(
&
rvr
,
0
,
sizeof
(
msg
_requestvote_resp
onse
_t
));
memset
(
&
rvr
,
0
,
sizeof
(
raft
_requestvote_resp_t
));
rvr
.
term
=
1
;
rvr
.
term
=
1
;
rvr
.
vote_granted
=
1
;
rvr
.
vote_granted
=
1
;
raft_recv_requestvote_response
(
r
,
raft_get_node
(
r
,
2
),
&
rvr
);
raft_recv_requestvote_response
(
r
,
raft_get_node
(
r
,
2
),
&
rvr
);
...
@@ -768,15 +768,15 @@ void TestRaft_server_recv_requestvote_reply_false_if_term_less_than_current_term
...
@@ -768,15 +768,15 @@ void TestRaft_server_recv_requestvote_reply_false_if_term_less_than_current_term
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_set_current_term
(
r
,
2
);
raft_set_current_term
(
r
,
2
);
/* term is less than current term */
/* term is less than current term */
msg
_requestvote_t
rv
;
raft
_requestvote_
req_
t
rv
;
memset
(
&
rv
,
0
,
sizeof
(
msg
_requestvote_t
));
memset
(
&
rv
,
0
,
sizeof
(
raft
_requestvote_
req_
t
));
rv
.
term
=
1
;
rv
.
term
=
1
;
int
e
=
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
int
e
=
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
CuAssertIntEquals
(
tc
,
0
,
e
);
CuAssertIntEquals
(
tc
,
0
,
e
);
...
@@ -796,7 +796,7 @@ void TestRaft_leader_recv_requestvote_does_not_step_down(
...
@@ -796,7 +796,7 @@ void TestRaft_leader_recv_requestvote_does_not_step_down(
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -806,8 +806,8 @@ void TestRaft_leader_recv_requestvote_does_not_step_down(
...
@@ -806,8 +806,8 @@ void TestRaft_leader_recv_requestvote_does_not_step_down(
CuAssertIntEquals
(
tc
,
1
,
raft_is_leader
(
r
));
CuAssertIntEquals
(
tc
,
1
,
raft_is_leader
(
r
));
/* term is less than current term */
/* term is less than current term */
msg
_requestvote_t
rv
;
raft
_requestvote_
req_
t
rv
;
memset
(
&
rv
,
0
,
sizeof
(
msg
_requestvote_t
));
memset
(
&
rv
,
0
,
sizeof
(
raft
_requestvote_
req_
t
));
rv
.
term
=
1
;
rv
.
term
=
1
;
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
CuAssertIntEquals
(
tc
,
1
,
raft_get_leader_id
(
r
));
CuAssertIntEquals
(
tc
,
1
,
raft_get_leader_id
(
r
));
...
@@ -818,8 +818,8 @@ void TestRaft_server_recv_requestvote_reply_true_if_term_greater_than_or_equal_t
...
@@ -818,8 +818,8 @@ void TestRaft_server_recv_requestvote_reply_true_if_term_greater_than_or_equal_t
CuTest
*
tc
CuTest
*
tc
)
)
{
{
msg
_requestvote_t
rv
;
raft
_requestvote_
req_
t
rv
;
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
raft_cbs_t
funcs
=
{
raft_cbs_t
funcs
=
{
.
persist_term
=
__raft_persist_term
,
.
persist_term
=
__raft_persist_term
,
...
@@ -834,7 +834,7 @@ void TestRaft_server_recv_requestvote_reply_true_if_term_greater_than_or_equal_t
...
@@ -834,7 +834,7 @@ void TestRaft_server_recv_requestvote_reply_true_if_term_greater_than_or_equal_t
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
/* term is less than current term */
/* term is less than current term */
memset
(
&
rv
,
0
,
sizeof
(
msg
_requestvote_t
));
memset
(
&
rv
,
0
,
sizeof
(
raft
_requestvote_
req_
t
));
rv
.
term
=
2
;
rv
.
term
=
2
;
rv
.
last_log_idx
=
1
;
rv
.
last_log_idx
=
1
;
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
...
@@ -846,8 +846,8 @@ void TestRaft_server_recv_requestvote_reset_timeout(
...
@@ -846,8 +846,8 @@ void TestRaft_server_recv_requestvote_reset_timeout(
CuTest
*
tc
CuTest
*
tc
)
)
{
{
msg
_requestvote_t
rv
;
raft
_requestvote_
req_
t
rv
;
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
raft_cbs_t
funcs
=
{
raft_cbs_t
funcs
=
{
.
persist_term
=
__raft_persist_term
,
.
persist_term
=
__raft_persist_term
,
...
@@ -864,7 +864,7 @@ void TestRaft_server_recv_requestvote_reset_timeout(
...
@@ -864,7 +864,7 @@ void TestRaft_server_recv_requestvote_reset_timeout(
raft_set_election_timeout
(
r
,
1000
);
raft_set_election_timeout
(
r
,
1000
);
raft_periodic
(
r
,
900
);
raft_periodic
(
r
,
900
);
memset
(
&
rv
,
0
,
sizeof
(
msg
_requestvote_t
));
memset
(
&
rv
,
0
,
sizeof
(
raft
_requestvote_
req_
t
));
rv
.
term
=
2
;
rv
.
term
=
2
;
rv
.
last_log_idx
=
1
;
rv
.
last_log_idx
=
1
;
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
...
@@ -892,12 +892,12 @@ void TestRaft_server_recv_requestvote_candidate_step_down_if_term_is_higher_than
...
@@ -892,12 +892,12 @@ void TestRaft_server_recv_requestvote_candidate_step_down_if_term_is_higher_than
CuAssertIntEquals
(
tc
,
1
,
raft_get_voted_for
(
r
));
CuAssertIntEquals
(
tc
,
1
,
raft_get_voted_for
(
r
));
/* current term is less than term */
/* current term is less than term */
msg
_requestvote_t
rv
;
raft
_requestvote_
req_
t
rv
;
memset
(
&
rv
,
0
,
sizeof
(
msg
_requestvote_t
));
memset
(
&
rv
,
0
,
sizeof
(
raft
_requestvote_
req_
t
));
rv
.
candidate_id
=
2
;
rv
.
candidate_id
=
2
;
rv
.
term
=
2
;
rv
.
term
=
2
;
rv
.
last_log_idx
=
1
;
rv
.
last_log_idx
=
1
;
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
CuAssertIntEquals
(
tc
,
1
,
raft_is_follower
(
r
));
CuAssertIntEquals
(
tc
,
1
,
raft_is_follower
(
r
));
CuAssertIntEquals
(
tc
,
2
,
raft_get_current_term
(
r
));
CuAssertIntEquals
(
tc
,
2
,
raft_get_current_term
(
r
));
...
@@ -924,12 +924,12 @@ void TestRaft_server_recv_requestvote_depends_on_candidate_id(
...
@@ -924,12 +924,12 @@ void TestRaft_server_recv_requestvote_depends_on_candidate_id(
CuAssertIntEquals
(
tc
,
1
,
raft_get_voted_for
(
r
));
CuAssertIntEquals
(
tc
,
1
,
raft_get_voted_for
(
r
));
/* current term is less than term */
/* current term is less than term */
msg
_requestvote_t
rv
;
raft
_requestvote_
req_
t
rv
;
memset
(
&
rv
,
0
,
sizeof
(
msg
_requestvote_t
));
memset
(
&
rv
,
0
,
sizeof
(
raft
_requestvote_
req_
t
));
rv
.
candidate_id
=
3
;
rv
.
candidate_id
=
3
;
rv
.
term
=
2
;
rv
.
term
=
2
;
rv
.
last_log_idx
=
1
;
rv
.
last_log_idx
=
1
;
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
raft_recv_requestvote
(
r
,
NULL
,
&
rv
,
&
rvr
);
raft_recv_requestvote
(
r
,
NULL
,
&
rv
,
&
rvr
);
CuAssertIntEquals
(
tc
,
1
,
raft_is_follower
(
r
));
CuAssertIntEquals
(
tc
,
1
,
raft_is_follower
(
r
));
CuAssertIntEquals
(
tc
,
2
,
raft_get_current_term
(
r
));
CuAssertIntEquals
(
tc
,
2
,
raft_get_current_term
(
r
));
...
@@ -958,12 +958,12 @@ void TestRaft_server_recv_requestvote_dont_grant_vote_if_we_didnt_vote_for_this_
...
@@ -958,12 +958,12 @@ void TestRaft_server_recv_requestvote_dont_grant_vote_if_we_didnt_vote_for_this_
/* vote for self */
/* vote for self */
raft_vote_for_nodeid
(
r
,
1
);
raft_vote_for_nodeid
(
r
,
1
);
msg
_requestvote_t
rv
=
{};
raft
_requestvote_
req_
t
rv
=
{};
rv
.
term
=
1
;
rv
.
term
=
1
;
rv
.
candidate_id
=
2
;
rv
.
candidate_id
=
2
;
rv
.
last_log_idx
=
1
;
rv
.
last_log_idx
=
1
;
rv
.
last_log_term
=
1
;
rv
.
last_log_term
=
1
;
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
CuAssertTrue
(
tc
,
0
==
rvr
.
vote_granted
);
CuAssertTrue
(
tc
,
0
==
rvr
.
vote_granted
);
...
@@ -990,21 +990,21 @@ void TestRaft_server_recv_requestvote_ignore_if_master_is_fresh(CuTest * tc)
...
@@ -990,21 +990,21 @@ void TestRaft_server_recv_requestvote_ignore_if_master_is_fresh(CuTest * tc)
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
raft_set_election_timeout
(
r
,
1000
);
raft_set_election_timeout
(
r
,
1000
);
msg
_appendentries_t
ae
=
{
0
};
raft
_appendentries_
req_
t
ae
=
{
0
};
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
ae
.
term
=
1
;
ae
.
term
=
1
;
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
CuAssertTrue
(
tc
,
1
==
aer
.
success
);
CuAssertTrue
(
tc
,
1
==
aer
.
success
);
msg
_requestvote_t
rv
=
{
raft
_requestvote_
req_
t
rv
=
{
.
prevote
=
1
,
.
prevote
=
1
,
.
term
=
2
,
.
term
=
2
,
.
candidate_id
=
3
,
.
candidate_id
=
3
,
.
last_log_idx
=
0
,
.
last_log_idx
=
0
,
.
last_log_term
=
1
.
last_log_term
=
1
};
};
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
3
),
&
rv
,
&
rvr
);
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
3
),
&
rv
,
&
rvr
);
CuAssertTrue
(
tc
,
1
!=
rvr
.
vote_granted
);
CuAssertTrue
(
tc
,
1
!=
rvr
.
vote_granted
);
...
@@ -1025,7 +1025,7 @@ void TestRaft_server_recv_prevote_ignore_if_candidate(CuTest * tc)
...
@@ -1025,7 +1025,7 @@ void TestRaft_server_recv_prevote_ignore_if_candidate(CuTest * tc)
raft_become_candidate
(
r
);
raft_become_candidate
(
r
);
msg
_requestvote_resp
onse
_t
rv
=
{
raft
_requestvote_resp_t
rv
=
{
.
term
=
1
,
.
term
=
1
,
.
request_term
=
1
,
.
request_term
=
1
,
.
prevote
=
1
,
.
prevote
=
1
,
...
@@ -1048,7 +1048,7 @@ void TestRaft_server_recv_reqvote_ignore_if_not_candidate(CuTest * tc)
...
@@ -1048,7 +1048,7 @@ void TestRaft_server_recv_reqvote_ignore_if_not_candidate(CuTest * tc)
raft_become_precandidate
(
r
);
raft_become_precandidate
(
r
);
msg
_requestvote_resp
onse
_t
rv
=
{
raft
_requestvote_resp_t
rv
=
{
.
term
=
1
,
.
term
=
1
,
.
request_term
=
1
.
request_term
=
1
};
};
...
@@ -1070,7 +1070,7 @@ void TestRaft_server_recv_reqvote_always_update_term(CuTest * tc)
...
@@ -1070,7 +1070,7 @@ void TestRaft_server_recv_reqvote_always_update_term(CuTest * tc)
raft_become_precandidate
(
r
);
raft_become_precandidate
(
r
);
msg
_requestvote_resp
onse
_t
rv
=
{
raft
_requestvote_resp_t
rv
=
{
.
term
=
3
,
.
term
=
3
,
.
request_term
=
3
,
.
request_term
=
3
,
};
};
...
@@ -1124,13 +1124,13 @@ void TestRaft_follower_recv_appendentries_reply_false_if_term_less_than_currentt
...
@@ -1124,13 +1124,13 @@ void TestRaft_follower_recv_appendentries_reply_false_if_term_less_than_currentt
CuAssertTrue
(
tc
,
-
1
==
raft_get_leader_id
(
r
));
CuAssertTrue
(
tc
,
-
1
==
raft_get_leader_id
(
r
));
/* term is low */
/* term is low */
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
/* higher current term */
/* higher current term */
raft_set_current_term
(
r
,
5
);
raft_set_current_term
(
r
,
5
);
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
CuAssertTrue
(
tc
,
0
==
aer
.
success
);
CuAssertTrue
(
tc
,
0
==
aer
.
success
);
...
@@ -1149,9 +1149,9 @@ void TestRaft_follower_recv_appendentries_does_not_need_node(CuTest * tc)
...
@@ -1149,9 +1149,9 @@ void TestRaft_follower_recv_appendentries_does_not_need_node(CuTest * tc)
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
msg
_appendentries_t
ae
=
{};
raft
_appendentries_
req_
t
ae
=
{};
ae
.
term
=
1
;
ae
.
term
=
1
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
raft_recv_appendentries
(
r
,
NULL
,
&
ae
,
&
aer
);
raft_recv_appendentries
(
r
,
NULL
,
&
ae
,
&
aer
);
CuAssertTrue
(
tc
,
1
==
aer
.
success
);
CuAssertTrue
(
tc
,
1
==
aer
.
success
);
}
}
...
@@ -1167,8 +1167,8 @@ void TestRaft_follower_recv_appendentries_updates_currentterm_if_term_gt_current
...
@@ -1167,8 +1167,8 @@ void TestRaft_follower_recv_appendentries_updates_currentterm_if_term_gt_current
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -1178,7 +1178,7 @@ void TestRaft_follower_recv_appendentries_updates_currentterm_if_term_gt_current
...
@@ -1178,7 +1178,7 @@ void TestRaft_follower_recv_appendentries_updates_currentterm_if_term_gt_current
CuAssertTrue
(
tc
,
-
1
==
raft_get_leader_id
(
r
));
CuAssertTrue
(
tc
,
-
1
==
raft_get_leader_id
(
r
));
/* newer term for appendentry */
/* newer term for appendentry */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
/* no prev log idx */
/* no prev log idx */
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_idx
=
0
;
ae
.
term
=
2
;
ae
.
term
=
2
;
...
@@ -1204,8 +1204,8 @@ void TestRaft_follower_recv_appendentries_does_not_log_if_no_entries_are_specifi
...
@@ -1204,8 +1204,8 @@ void TestRaft_follower_recv_appendentries_does_not_log_if_no_entries_are_specifi
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -1216,7 +1216,7 @@ void TestRaft_follower_recv_appendentries_does_not_log_if_no_entries_are_specifi
...
@@ -1216,7 +1216,7 @@ void TestRaft_follower_recv_appendentries_does_not_log_if_no_entries_are_specifi
CuAssertTrue
(
tc
,
0
==
raft_get_log_count
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_log_count
(
r
));
/* receive an appendentry with commit */
/* receive an appendentry with commit */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_idx
=
4
;
ae
.
prev_log_idx
=
4
;
...
@@ -1236,8 +1236,8 @@ void TestRaft_follower_recv_appendentries_increases_log(CuTest * tc)
...
@@ -1236,8 +1236,8 @@ void TestRaft_follower_recv_appendentries_increases_log(CuTest * tc)
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
char
*
str
=
"aaa"
;
char
*
str
=
"aaa"
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
...
@@ -1249,7 +1249,7 @@ void TestRaft_follower_recv_appendentries_increases_log(CuTest * tc)
...
@@ -1249,7 +1249,7 @@ void TestRaft_follower_recv_appendentries_increases_log(CuTest * tc)
CuAssertTrue
(
tc
,
0
==
raft_get_log_count
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_log_count
(
r
));
/* receive an appendentry with commit */
/* receive an appendentry with commit */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
3
;
ae
.
term
=
3
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
/* first appendentries msg */
/* first appendentries msg */
...
@@ -1280,8 +1280,8 @@ void TestRaft_follower_recv_appendentries_reply_false_if_doesnt_have_log_at_prev
...
@@ -1280,8 +1280,8 @@ void TestRaft_follower_recv_appendentries_reply_false_if_doesnt_have_log_at_prev
char
*
str
=
"aaa"
;
char
*
str
=
"aaa"
;
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -1291,7 +1291,7 @@ void TestRaft_follower_recv_appendentries_reply_false_if_doesnt_have_log_at_prev
...
@@ -1291,7 +1291,7 @@ void TestRaft_follower_recv_appendentries_reply_false_if_doesnt_have_log_at_prev
// TODO at log manually?
// TODO at log manually?
/* log idx that server doesn't have */
/* log idx that server doesn't have */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
2
;
ae
.
term
=
2
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_idx
=
1
;
/* prev_log_term is less than current term (ie. 2) */
/* prev_log_term is less than current term (ie. 2) */
...
@@ -1347,8 +1347,8 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
...
@@ -1347,8 +1347,8 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -1359,7 +1359,7 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
...
@@ -1359,7 +1359,7 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
raft_entry_t
*
ety_appended
=
__create_mock_entries_for_conflict_tests
(
tc
,
r
,
strs
);
raft_entry_t
*
ety_appended
=
__create_mock_entries_for_conflict_tests
(
tc
,
r
,
strs
);
/* pass a appendentry that is newer */
/* pass a appendentry that is newer */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
2
;
ae
.
term
=
2
;
/* entries from 2 onwards will be overwritten by this appendentries message */
/* entries from 2 onwards will be overwritten by this appendentries message */
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_idx
=
1
;
...
@@ -1391,8 +1391,8 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
...
@@ -1391,8 +1391,8 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -1404,7 +1404,7 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
...
@@ -1404,7 +1404,7 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
/* pass a appendentry that is newer */
/* pass a appendentry that is newer */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
2
;
ae
.
term
=
2
;
/* ALL append entries will be overwritten by this appendentries message */
/* ALL append entries will be overwritten by this appendentries message */
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_idx
=
0
;
...
@@ -1432,8 +1432,8 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
...
@@ -1432,8 +1432,8 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -1446,7 +1446,7 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
...
@@ -1446,7 +1446,7 @@ void TestRaft_follower_recv_appendentries_delete_entries_if_conflict_with_new_en
__create_mock_entries_for_conflict_tests
(
tc
,
r
,
strs
);
__create_mock_entries_for_conflict_tests
(
tc
,
r
,
strs
);
CuAssertIntEquals
(
tc
,
3
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
3
,
raft_get_log_count
(
r
));
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
2
;
ae
.
term
=
2
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
...
@@ -1477,10 +1477,10 @@ void TestRaft_follower_recv_appendentries_add_new_entries_not_already_in_log(
...
@@ -1477,10 +1477,10 @@ void TestRaft_follower_recv_appendentries_add_new_entries_not_already_in_log(
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
...
@@ -1507,10 +1507,10 @@ void TestRaft_follower_recv_appendentries_does_not_add_dupe_entries_already_in_l
...
@@ -1507,10 +1507,10 @@ void TestRaft_follower_recv_appendentries_does_not_add_dupe_entries_already_in_l
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
...
@@ -1596,11 +1596,11 @@ void TestRaft_follower_recv_appendentries_partial_failures(
...
@@ -1596,11 +1596,11 @@ void TestRaft_follower_recv_appendentries_partial_failures(
__RAFT_APPEND_ENTRY
(
r
,
2
,
1
,
"1bb"
);
__RAFT_APPEND_ENTRY
(
r
,
2
,
1
,
"1bb"
);
CuAssertIntEquals
(
tc
,
2
,
raft_get_current_idx
(
r
));
CuAssertIntEquals
(
tc
,
2
,
raft_get_current_idx
(
r
));
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
/* To be received: entry 2 and 3 of term 2. */
/* To be received: entry 2 and 3 of term 2. */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
2
;
ae
.
term
=
2
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
...
@@ -1658,21 +1658,21 @@ void TestRaft_follower_recv_appendentries_set_commitidx_to_prevLogIdx(
...
@@ -1658,21 +1658,21 @@ void TestRaft_follower_recv_appendentries_set_commitidx_to_prevLogIdx(
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
/* include entries */
/* include entries */
msg
_entry_t
e
[
4
]
=
{
raft
_entry_
req_
t
e
[
4
]
=
{
{
.
id
=
1
,
.
term
=
1
},
{
.
id
=
1
,
.
term
=
1
},
{
.
id
=
2
,
.
term
=
1
},
{
.
id
=
2
,
.
term
=
1
},
{
.
id
=
3
,
.
term
=
1
},
{
.
id
=
3
,
.
term
=
1
},
{
.
id
=
4
,
.
term
=
1
}
{
.
id
=
4
,
.
term
=
1
}
};
};
msg
_entry_t
*
e_array
[
4
]
=
{
raft
_entry_
req_
t
*
e_array
[
4
]
=
{
&
e
[
0
],
&
e
[
1
],
&
e
[
2
],
&
e
[
3
]
&
e
[
0
],
&
e
[
1
],
&
e
[
2
],
&
e
[
3
]
};
};
ae
.
entries
=
e_array
;
ae
.
entries
=
e_array
;
...
@@ -1680,7 +1680,7 @@ void TestRaft_follower_recv_appendentries_set_commitidx_to_prevLogIdx(
...
@@ -1680,7 +1680,7 @@ void TestRaft_follower_recv_appendentries_set_commitidx_to_prevLogIdx(
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
/* receive an appendentry with commit */
/* receive an appendentry with commit */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_idx
=
4
;
ae
.
prev_log_idx
=
4
;
...
@@ -1706,21 +1706,21 @@ void TestRaft_follower_recv_appendentries_set_commitidx_to_LeaderCommit(
...
@@ -1706,21 +1706,21 @@ void TestRaft_follower_recv_appendentries_set_commitidx_to_LeaderCommit(
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
/* include entries */
/* include entries */
msg
_entry_t
e
[
4
]
=
{
raft
_entry_
req_
t
e
[
4
]
=
{
{
.
id
=
1
,
.
term
=
1
},
{
.
id
=
1
,
.
term
=
1
},
{
.
id
=
2
,
.
term
=
1
},
{
.
id
=
2
,
.
term
=
1
},
{
.
id
=
3
,
.
term
=
1
},
{
.
id
=
3
,
.
term
=
1
},
{
.
id
=
4
,
.
term
=
1
}
{
.
id
=
4
,
.
term
=
1
}
};
};
msg
_entry_t
*
e_array
[
4
]
=
{
raft
_entry_
req_
t
*
e_array
[
4
]
=
{
&
e
[
0
],
&
e
[
1
],
&
e
[
2
],
&
e
[
3
]
&
e
[
0
],
&
e
[
1
],
&
e
[
2
],
&
e
[
3
]
};
};
...
@@ -1729,7 +1729,7 @@ void TestRaft_follower_recv_appendentries_set_commitidx_to_LeaderCommit(
...
@@ -1729,7 +1729,7 @@ void TestRaft_follower_recv_appendentries_set_commitidx_to_LeaderCommit(
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
/* receive an appendentry with commit */
/* receive an appendentry with commit */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_idx
=
3
;
ae
.
prev_log_idx
=
3
;
...
@@ -1759,14 +1759,14 @@ void TestRaft_follower_recv_appendentries_failure_includes_current_idx(
...
@@ -1759,14 +1759,14 @@ void TestRaft_follower_recv_appendentries_failure_includes_current_idx(
__RAFT_APPEND_ENTRY
(
r
,
1
,
1
,
"aaa"
);
__RAFT_APPEND_ENTRY
(
r
,
1
,
1
,
"aaa"
);
/* receive an appendentry with commit */
/* receive an appendentry with commit */
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
/* lower term means failure */
/* lower term means failure */
ae
.
term
=
0
;
ae
.
term
=
0
;
ae
.
prev_log_term
=
0
;
ae
.
prev_log_term
=
0
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_idx
=
0
;
ae
.
leader_commit
=
0
;
ae
.
leader_commit
=
0
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
CuAssertTrue
(
tc
,
0
==
aer
.
success
);
CuAssertTrue
(
tc
,
0
==
aer
.
success
);
...
@@ -1809,8 +1809,8 @@ void TestRaft_follower_becomes_precandidate_when_election_timeout_occurs(
...
@@ -1809,8 +1809,8 @@ void TestRaft_follower_becomes_precandidate_when_election_timeout_occurs(
void
TestRaft_follower_dont_grant_vote_if_candidate_has_a_less_complete_log
(
void
TestRaft_follower_dont_grant_vote_if_candidate_has_a_less_complete_log
(
CuTest
*
tc
)
CuTest
*
tc
)
{
{
msg
_requestvote_t
rv
;
raft
_requestvote_
req_
t
rv
;
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
raft_cbs_t
funcs
=
{
raft_cbs_t
funcs
=
{
.
persist_term
=
__raft_persist_term
,
.
persist_term
=
__raft_persist_term
,
...
@@ -1825,7 +1825,7 @@ void TestRaft_follower_dont_grant_vote_if_candidate_has_a_less_complete_log(
...
@@ -1825,7 +1825,7 @@ void TestRaft_follower_dont_grant_vote_if_candidate_has_a_less_complete_log(
/* request vote */
/* request vote */
/* vote indicates candidate's log is not complete compared to follower */
/* vote indicates candidate's log is not complete compared to follower */
memset
(
&
rv
,
0
,
sizeof
(
msg
_requestvote_t
));
memset
(
&
rv
,
0
,
sizeof
(
raft
_requestvote_
req_
t
));
rv
.
term
=
1
;
rv
.
term
=
1
;
rv
.
candidate_id
=
1
;
rv
.
candidate_id
=
1
;
rv
.
last_log_idx
=
1
;
rv
.
last_log_idx
=
1
;
...
@@ -1843,7 +1843,7 @@ void TestRaft_follower_dont_grant_vote_if_candidate_has_a_less_complete_log(
...
@@ -1843,7 +1843,7 @@ void TestRaft_follower_dont_grant_vote_if_candidate_has_a_less_complete_log(
/* approve vote, because last_log_term is higher */
/* approve vote, because last_log_term is higher */
raft_set_current_term
(
r
,
2
);
raft_set_current_term
(
r
,
2
);
memset
(
&
rv
,
0
,
sizeof
(
msg
_requestvote_t
));
memset
(
&
rv
,
0
,
sizeof
(
raft
_requestvote_
req_
t
));
rv
.
term
=
2
;
rv
.
term
=
2
;
rv
.
candidate_id
=
1
;
rv
.
candidate_id
=
1
;
rv
.
last_log_idx
=
1
;
rv
.
last_log_idx
=
1
;
...
@@ -1865,10 +1865,10 @@ void TestRaft_follower_recv_appendentries_heartbeat_does_not_overwrite_logs(
...
@@ -1865,10 +1865,10 @@ void TestRaft_follower_recv_appendentries_heartbeat_does_not_overwrite_logs(
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
...
@@ -1880,7 +1880,7 @@ void TestRaft_follower_recv_appendentries_heartbeat_does_not_overwrite_logs(
...
@@ -1880,7 +1880,7 @@ void TestRaft_follower_recv_appendentries_heartbeat_does_not_overwrite_logs(
/* The server sends a follow up AE
/* The server sends a follow up AE
* NOTE: the server has received a response from the last AE so
* NOTE: the server has received a response from the last AE so
* prev_log_idx has been incremented */
* prev_log_idx has been incremented */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
...
@@ -1892,7 +1892,7 @@ void TestRaft_follower_recv_appendentries_heartbeat_does_not_overwrite_logs(
...
@@ -1892,7 +1892,7 @@ void TestRaft_follower_recv_appendentries_heartbeat_does_not_overwrite_logs(
/* receive a heartbeat
/* receive a heartbeat
* NOTE: the leader hasn't received the response to the last AE so it can
* NOTE: the leader hasn't received the response to the last AE so it can
* only assume prev_Log_idx is still 1 */
* only assume prev_Log_idx is still 1 */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_idx
=
1
;
...
@@ -1916,10 +1916,10 @@ void TestRaft_follower_recv_appendentries_does_not_deleted_commited_entries(
...
@@ -1916,10 +1916,10 @@ void TestRaft_follower_recv_appendentries_does_not_deleted_commited_entries(
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
...
@@ -1929,7 +1929,7 @@ void TestRaft_follower_recv_appendentries_does_not_deleted_commited_entries(
...
@@ -1929,7 +1929,7 @@ void TestRaft_follower_recv_appendentries_does_not_deleted_commited_entries(
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
/* Follow up AE. Node responded with success */
/* Follow up AE. Node responded with success */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
...
@@ -1940,7 +1940,7 @@ void TestRaft_follower_recv_appendentries_does_not_deleted_commited_entries(
...
@@ -1940,7 +1940,7 @@ void TestRaft_follower_recv_appendentries_does_not_deleted_commited_entries(
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
/* The server sends a follow up AE */
/* The server sends a follow up AE */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
...
@@ -1957,7 +1957,7 @@ void TestRaft_follower_recv_appendentries_does_not_deleted_commited_entries(
...
@@ -1957,7 +1957,7 @@ void TestRaft_follower_recv_appendentries_does_not_deleted_commited_entries(
/* The server sends a follow up AE.
/* The server sends a follow up AE.
* This appendentry forces the node to check if it's going to delete
* This appendentry forces the node to check if it's going to delete
* commited logs */
* commited logs */
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
prev_log_idx
=
3
;
ae
.
prev_log_idx
=
3
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
...
@@ -2061,10 +2061,10 @@ void TestRaft_follower_recv_appendentries_resets_election_timeout(
...
@@ -2061,10 +2061,10 @@ void TestRaft_follower_recv_appendentries_resets_election_timeout(
raft_periodic
(
r
,
900
);
raft_periodic
(
r
,
900
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
1
),
&
ae
,
&
aer
);
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
1
),
&
ae
,
&
aer
);
CuAssertTrue
(
tc
,
0
==
raft_get_timeout_elapsed
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_timeout_elapsed
(
r
));
...
@@ -2079,7 +2079,7 @@ void TestRaft_follower_becoming_candidate_requests_votes_from_other_servers(
...
@@ -2079,7 +2079,7 @@ void TestRaft_follower_becoming_candidate_requests_votes_from_other_servers(
.
persist_vote
=
__raft_persist_vote
,
.
persist_vote
=
__raft_persist_vote
,
.
send_requestvote
=
sender_requestvote
,
.
send_requestvote
=
sender_requestvote
,
};
};
msg
_requestvote_
t
*
rv
;
raft
_requestvote_
req_t
*
rv
;
void
*
sender
=
sender_new
(
NULL
);
void
*
sender
=
sender_new
(
NULL
);
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
...
@@ -2131,7 +2131,7 @@ void TestRaft_candidate_election_timeout_and_no_leader_results_in_new_election(
...
@@ -2131,7 +2131,7 @@ void TestRaft_candidate_election_timeout_and_no_leader_results_in_new_election(
CuAssertTrue
(
tc
,
1
==
raft_get_current_term
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_current_term
(
r
));
CuAssertIntEquals
(
tc
,
RAFT_STATE_PRECANDIDATE
,
raft_get_state
(
r
));
CuAssertIntEquals
(
tc
,
RAFT_STATE_PRECANDIDATE
,
raft_get_state
(
r
));
msg
_requestvote_resp
onse
_t
vr0
=
{
raft
_requestvote_resp_t
vr0
=
{
.
prevote
=
1
,
.
prevote
=
1
,
.
request_term
=
raft_get_current_term
(
r
)
+
1
,
.
request_term
=
raft_get_current_term
(
r
)
+
1
,
.
term
=
0
,
.
term
=
0
,
...
@@ -2141,7 +2141,7 @@ void TestRaft_candidate_election_timeout_and_no_leader_results_in_new_election(
...
@@ -2141,7 +2141,7 @@ void TestRaft_candidate_election_timeout_and_no_leader_results_in_new_election(
raft_recv_requestvote_response
(
r
,
raft_get_node
(
r
,
2
),
&
vr0
);
raft_recv_requestvote_response
(
r
,
raft_get_node
(
r
,
2
),
&
vr0
);
CuAssertIntEquals
(
tc
,
RAFT_STATE_CANDIDATE
,
raft_get_state
(
r
));
CuAssertIntEquals
(
tc
,
RAFT_STATE_CANDIDATE
,
raft_get_state
(
r
));
msg
_requestvote_resp
onse
_t
vr1
=
{
raft
_requestvote_resp_t
vr1
=
{
.
request_term
=
2
,
.
request_term
=
2
,
.
term
=
2
,
.
term
=
2
,
.
vote_granted
=
1
.
vote_granted
=
1
...
@@ -2155,7 +2155,7 @@ void TestRaft_candidate_election_timeout_and_no_leader_results_in_new_election(
...
@@ -2155,7 +2155,7 @@ void TestRaft_candidate_election_timeout_and_no_leader_results_in_new_election(
/* Candidate 5.2 */
/* Candidate 5.2 */
void
TestRaft_candidate_receives_majority_of_votes_becomes_leader
(
CuTest
*
tc
)
void
TestRaft_candidate_receives_majority_of_votes_becomes_leader
(
CuTest
*
tc
)
{
{
msg
_requestvote_resp
onse
_t
vr
;
raft
_requestvote_resp_t
vr
;
raft_cbs_t
funcs
=
{
raft_cbs_t
funcs
=
{
.
persist_term
=
__raft_persist_term
,
.
persist_term
=
__raft_persist_term
,
...
@@ -2180,7 +2180,7 @@ void TestRaft_candidate_receives_majority_of_votes_becomes_leader(CuTest * tc)
...
@@ -2180,7 +2180,7 @@ void TestRaft_candidate_receives_majority_of_votes_becomes_leader(CuTest * tc)
CuAssertTrue
(
tc
,
1
==
raft_get_nvotes_for_me
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_nvotes_for_me
(
r
));
/* a vote for us */
/* a vote for us */
memset
(
&
vr
,
0
,
sizeof
(
msg
_requestvote_resp
onse
_t
));
memset
(
&
vr
,
0
,
sizeof
(
raft
_requestvote_resp_t
));
vr
.
request_term
=
1
;
vr
.
request_term
=
1
;
vr
.
term
=
1
;
vr
.
term
=
1
;
vr
.
vote_granted
=
1
;
vr
.
vote_granted
=
1
;
...
@@ -2207,15 +2207,15 @@ void TestRaft_candidate_will_not_respond_to_voterequest_if_it_has_already_voted(
...
@@ -2207,15 +2207,15 @@ void TestRaft_candidate_will_not_respond_to_voterequest_if_it_has_already_voted(
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_requestvote_t
rv
;
raft
_requestvote_
req_
t
rv
;
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_vote
(
r
,
raft_get_node
(
r
,
1
));
raft_vote
(
r
,
raft_get_node
(
r
,
1
));
memset
(
&
rv
,
0
,
sizeof
(
msg
_requestvote_t
));
memset
(
&
rv
,
0
,
sizeof
(
raft
_requestvote_
req_
t
));
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
/* we've vote already, so won't respond with a vote granted... */
/* we've vote already, so won't respond with a vote granted... */
...
@@ -2246,7 +2246,7 @@ void TestRaft_candidate_requestvote_includes_logidx(CuTest * tc)
...
@@ -2246,7 +2246,7 @@ void TestRaft_candidate_requestvote_includes_logidx(CuTest * tc)
__RAFT_APPEND_ENTRY
(
r
,
102
,
3
,
"aaa"
);
__RAFT_APPEND_ENTRY
(
r
,
102
,
3
,
"aaa"
);
raft_send_requestvote
(
r
,
raft_get_node
(
r
,
2
));
raft_send_requestvote
(
r
,
raft_get_node
(
r
,
2
));
msg
_requestvote_
t
*
rv
=
sender_poll_msg_data
(
sender
);
raft
_requestvote_
req_t
*
rv
=
sender_poll_msg_data
(
sender
);
CuAssertTrue
(
tc
,
NULL
!=
rv
);
CuAssertTrue
(
tc
,
NULL
!=
rv
);
CuAssertIntEquals
(
tc
,
3
,
rv
->
last_log_idx
);
CuAssertIntEquals
(
tc
,
3
,
rv
->
last_log_idx
);
CuAssertIntEquals
(
tc
,
5
,
rv
->
term
);
CuAssertIntEquals
(
tc
,
5
,
rv
->
term
);
...
@@ -2275,8 +2275,8 @@ void TestRaft_candidate_recv_requestvote_response_becomes_follower_if_current_te
...
@@ -2275,8 +2275,8 @@ void TestRaft_candidate_recv_requestvote_response_becomes_follower_if_current_te
CuAssertTrue
(
tc
,
-
1
==
raft_get_leader_id
(
r
));
CuAssertTrue
(
tc
,
-
1
==
raft_get_leader_id
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_current_term
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_current_term
(
r
));
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
memset
(
&
rvr
,
0
,
sizeof
(
msg
_requestvote_resp
onse
_t
));
memset
(
&
rvr
,
0
,
sizeof
(
raft
_requestvote_resp_t
));
rvr
.
request_term
=
2
;
rvr
.
request_term
=
2
;
rvr
.
term
=
2
;
rvr
.
term
=
2
;
rvr
.
vote_granted
=
0
;
rvr
.
vote_granted
=
0
;
...
@@ -2308,10 +2308,10 @@ void TestRaft_candidate_recv_appendentries_frm_leader_results_in_follower(
...
@@ -2308,10 +2308,10 @@ void TestRaft_candidate_recv_appendentries_frm_leader_results_in_follower(
CuAssertTrue
(
tc
,
0
==
raft_get_current_term
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_current_term
(
r
));
/* receive recent appendentries */
/* receive recent appendentries */
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
leader_id
=
2
;
ae
.
leader_id
=
2
;
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
...
@@ -2335,8 +2335,8 @@ void TestRaft_candidate_recv_appendentries_from_same_term_results_in_step_down(
...
@@ -2335,8 +2335,8 @@ void TestRaft_candidate_recv_appendentries_from_same_term_results_in_step_down(
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -2346,7 +2346,7 @@ void TestRaft_candidate_recv_appendentries_from_same_term_results_in_step_down(
...
@@ -2346,7 +2346,7 @@ void TestRaft_candidate_recv_appendentries_from_same_term_results_in_step_down(
CuAssertTrue
(
tc
,
0
==
raft_is_follower
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_is_follower
(
r
));
CuAssertIntEquals
(
tc
,
1
,
raft_get_voted_for
(
r
));
CuAssertIntEquals
(
tc
,
1
,
raft_get_voted_for
(
r
));
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
2
;
ae
.
term
=
2
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
...
@@ -2443,7 +2443,7 @@ void TestRaft_leader_when_it_becomes_a_leader_sends_empty_appendentries(
...
@@ -2443,7 +2443,7 @@ void TestRaft_leader_when_it_becomes_a_leader_sends_empty_appendentries(
raft_become_leader
(
r
);
raft_become_leader
(
r
);
/* receive appendentries messages for both nodes */
/* receive appendentries messages for both nodes */
msg
_appendentries_
t
*
ae
=
sender_poll_msg_data
(
sender
);
raft
_appendentries_
req_t
*
ae
=
sender_poll_msg_data
(
sender
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
ae
=
sender_poll_msg_data
(
sender
);
ae
=
sender_poll_msg_data
(
sender
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
...
@@ -2460,7 +2460,7 @@ void TestRaft_leader_responds_to_entry_msg_when_entry_is_committed(CuTest * tc)
...
@@ -2460,7 +2460,7 @@ void TestRaft_leader_responds_to_entry_msg_when_entry_is_committed(CuTest * tc)
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -2470,7 +2470,7 @@ void TestRaft_leader_responds_to_entry_msg_when_entry_is_committed(CuTest * tc)
...
@@ -2470,7 +2470,7 @@ void TestRaft_leader_responds_to_entry_msg_when_entry_is_committed(CuTest * tc)
CuAssertTrue
(
tc
,
0
==
raft_get_log_count
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_log_count
(
r
));
/* entry message */
/* entry message */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
raft_recv_entry
(
r
,
ety
,
&
cr
);
raft_recv_entry
(
r
,
ety
,
&
cr
);
...
@@ -2482,7 +2482,7 @@ void TestRaft_leader_responds_to_entry_msg_when_entry_is_committed(CuTest * tc)
...
@@ -2482,7 +2482,7 @@ void TestRaft_leader_responds_to_entry_msg_when_entry_is_committed(CuTest * tc)
void
TestRaft_non_leader_recv_entry_msg_fails
(
CuTest
*
tc
)
void
TestRaft_non_leader_recv_entry_msg_fails
(
CuTest
*
tc
)
{
{
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
...
@@ -2521,7 +2521,7 @@ void TestRaft_leader_sends_appendentries_with_NextIdx_when_PrevIdx_gt_NextIdx(
...
@@ -2521,7 +2521,7 @@ void TestRaft_leader_sends_appendentries_with_NextIdx_when_PrevIdx_gt_NextIdx(
/* receive appendentries messages */
/* receive appendentries messages */
raft_send_appendentries
(
r
,
p
);
raft_send_appendentries
(
r
,
p
);
msg
_appendentries_
t
*
ae
=
sender_poll_msg_data
(
sender
);
raft
_appendentries_
req_t
*
ae
=
sender_poll_msg_data
(
sender
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
}
}
...
@@ -2554,7 +2554,7 @@ void TestRaft_leader_sends_appendentries_with_leader_commit(
...
@@ -2554,7 +2554,7 @@ void TestRaft_leader_sends_appendentries_with_leader_commit(
/* receive appendentries messages */
/* receive appendentries messages */
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
2
));
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
2
));
msg
_appendentries_
t
*
ae
=
sender_poll_msg_data
(
sender
);
raft
_appendentries_
req_t
*
ae
=
sender_poll_msg_data
(
sender
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
CuAssertTrue
(
tc
,
ae
->
leader_commit
==
10
);
CuAssertTrue
(
tc
,
ae
->
leader_commit
==
10
);
}
}
...
@@ -2579,7 +2579,7 @@ void TestRaft_leader_sends_appendentries_with_prevLogIdx(
...
@@ -2579,7 +2579,7 @@ void TestRaft_leader_sends_appendentries_with_prevLogIdx(
/* receive appendentries messages */
/* receive appendentries messages */
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
2
));
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
2
));
msg
_appendentries_
t
*
ae
=
sender_poll_msg_data
(
sender
);
raft
_appendentries_
req_t
*
ae
=
sender_poll_msg_data
(
sender
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
CuAssertIntEquals
(
tc
,
0
,
ae
->
prev_log_idx
);
CuAssertIntEquals
(
tc
,
0
,
ae
->
prev_log_idx
);
...
@@ -2626,7 +2626,7 @@ void TestRaft_leader_sends_appendentries_when_node_has_next_idx_of_0(
...
@@ -2626,7 +2626,7 @@ void TestRaft_leader_sends_appendentries_when_node_has_next_idx_of_0(
/* receive appendentries messages */
/* receive appendentries messages */
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
2
));
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
2
));
msg
_appendentries_
t
*
ae
=
sender_poll_msg_data
(
sender
);
raft
_appendentries_
req_t
*
ae
=
sender_poll_msg_data
(
sender
);
/* add an entry */
/* add an entry */
/* receive appendentries messages */
/* receive appendentries messages */
...
@@ -2659,7 +2659,7 @@ void TestRaft_leader_updates_next_idx_on_send_ae(CuTest *tc)
...
@@ -2659,7 +2659,7 @@ void TestRaft_leader_updates_next_idx_on_send_ae(CuTest *tc)
/* receive appendentries messages */
/* receive appendentries messages */
raft_node_t
*
n
=
raft_get_node
(
r
,
2
);
raft_node_t
*
n
=
raft_get_node
(
r
,
2
);
raft_send_appendentries
(
r
,
n
);
raft_send_appendentries
(
r
,
n
);
msg
_appendentries_
t
*
ae
=
sender_poll_msg_data
(
sender
);
raft
_appendentries_
req_t
*
ae
=
sender_poll_msg_data
(
sender
);
raft_node_set_next_idx
(
n
,
1
);
raft_node_set_next_idx
(
n
,
1
);
__RAFT_APPEND_ENTRY
(
r
,
100
,
1
,
"aaa"
);
__RAFT_APPEND_ENTRY
(
r
,
100
,
1
,
"aaa"
);
...
@@ -2700,7 +2700,7 @@ void TestRaft_leader_retries_appendentries_with_decremented_NextIdx_log_inconsis
...
@@ -2700,7 +2700,7 @@ void TestRaft_leader_retries_appendentries_with_decremented_NextIdx_log_inconsis
/* receive appendentries messages */
/* receive appendentries messages */
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
2
));
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
2
));
msg
_appendentries_
t
*
ae
=
sender_poll_msg_data
(
sender
);
raft
_appendentries_
req_t
*
ae
=
sender_poll_msg_data
(
sender
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
}
}
...
@@ -2717,8 +2717,8 @@ void TestRaft_leader_append_entry_to_log_increases_idxno(CuTest * tc)
...
@@ -2717,8 +2717,8 @@ void TestRaft_leader_append_entry_to_log_increases_idxno(CuTest * tc)
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -2742,7 +2742,7 @@ void T_estRaft_leader_doesnt_append_entry_if_unique_id_is_duplicate(CuTest * tc)
...
@@ -2742,7 +2742,7 @@ void T_estRaft_leader_doesnt_append_entry_if_unique_id_is_duplicate(CuTest * tc)
{ NULL }
{ NULL }
};
};
msg
_entry_t ety;
raft
_entry_
req_
t ety;
ety.id = 1;
ety.id = 1;
ety.data = "entry";
ety.data = "entry";
ety.data.len = strlen("entry");
ety.data.len = strlen("entry");
...
@@ -2770,7 +2770,7 @@ void TestRaft_leader_recv_appendentries_response_increase_commit_idx_when_majori
...
@@ -2770,7 +2770,7 @@ void TestRaft_leader_recv_appendentries_response_increase_commit_idx_when_majori
.
send_appendentries
=
sender_appendentries
,
.
send_appendentries
=
sender_appendentries
,
.
log
=
NULL
.
log
=
NULL
};
};
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
void
*
sender
=
sender_new
(
NULL
);
void
*
sender
=
sender_new
(
NULL
);
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
...
@@ -2792,7 +2792,7 @@ void TestRaft_leader_recv_appendentries_response_increase_commit_idx_when_majori
...
@@ -2792,7 +2792,7 @@ void TestRaft_leader_recv_appendentries_response_increase_commit_idx_when_majori
__RAFT_APPEND_ENTRY
(
r
,
1
,
1
,
"aaa"
);
__RAFT_APPEND_ENTRY
(
r
,
1
,
1
,
"aaa"
);
__RAFT_APPEND_ENTRY
(
r
,
2
,
1
,
"bbb"
);
__RAFT_APPEND_ENTRY
(
r
,
2
,
1
,
"bbb"
);
memset
(
&
aer
,
0
,
sizeof
(
msg
_appendentries_resp
onse
_t
));
memset
(
&
aer
,
0
,
sizeof
(
raft
_appendentries_resp_t
));
/* FIRST entry log application */
/* FIRST entry log application */
/* send appendentries -
/* send appendentries -
...
@@ -2838,7 +2838,7 @@ void TestRaft_leader_recv_appendentries_response_set_has_sufficient_logs_for_nod
...
@@ -2838,7 +2838,7 @@ void TestRaft_leader_recv_appendentries_response_set_has_sufficient_logs_for_nod
.
node_has_sufficient_logs
=
__raft_node_has_sufficient_logs
,
.
node_has_sufficient_logs
=
__raft_node_has_sufficient_logs
,
.
log
=
NULL
.
log
=
NULL
};
};
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
...
@@ -2861,7 +2861,7 @@ void TestRaft_leader_recv_appendentries_response_set_has_sufficient_logs_for_nod
...
@@ -2861,7 +2861,7 @@ void TestRaft_leader_recv_appendentries_response_set_has_sufficient_logs_for_nod
__RAFT_APPEND_ENTRY
(
r
,
1
,
1
,
"aaa"
);
__RAFT_APPEND_ENTRY
(
r
,
1
,
1
,
"aaa"
);
__RAFT_APPEND_ENTRY
(
r
,
2
,
1
,
"bbb"
);
__RAFT_APPEND_ENTRY
(
r
,
2
,
1
,
"bbb"
);
memset
(
&
aer
,
0
,
sizeof
(
msg
_appendentries_resp
onse
_t
));
memset
(
&
aer
,
0
,
sizeof
(
raft
_appendentries_resp_t
));
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
5
));
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
5
));
aer
.
term
=
1
;
aer
.
term
=
1
;
...
@@ -2886,7 +2886,7 @@ void TestRaft_leader_recv_appendentries_response_fail_set_has_sufficient_logs_fo
...
@@ -2886,7 +2886,7 @@ void TestRaft_leader_recv_appendentries_response_fail_set_has_sufficient_logs_fo
.
node_has_sufficient_logs
=
__raft_node_has_sufficient_logs
,
.
node_has_sufficient_logs
=
__raft_node_has_sufficient_logs
,
.
log
=
NULL
.
log
=
NULL
};
};
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
...
@@ -2908,7 +2908,7 @@ void TestRaft_leader_recv_appendentries_response_fail_set_has_sufficient_logs_fo
...
@@ -2908,7 +2908,7 @@ void TestRaft_leader_recv_appendentries_response_fail_set_has_sufficient_logs_fo
/* append entries - we need two */
/* append entries - we need two */
__RAFT_APPEND_ENTRIES_SEQ_ID
(
r
,
3
,
1
,
1
,
"aaaa"
);
__RAFT_APPEND_ENTRIES_SEQ_ID
(
r
,
3
,
1
,
1
,
"aaaa"
);
memset
(
&
aer
,
0
,
sizeof
(
msg
_appendentries_resp
onse
_t
));
memset
(
&
aer
,
0
,
sizeof
(
raft
_appendentries_resp_t
));
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
5
));
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
5
));
aer
.
term
=
1
;
aer
.
term
=
1
;
...
@@ -2929,7 +2929,7 @@ void TestRaft_leader_recv_appendentries_response_increase_commit_idx_using_votin
...
@@ -2929,7 +2929,7 @@ void TestRaft_leader_recv_appendentries_response_increase_commit_idx_using_votin
.
send_appendentries
=
sender_appendentries
,
.
send_appendentries
=
sender_appendentries
,
.
log
=
NULL
.
log
=
NULL
};
};
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
void
*
sender
=
sender_new
(
NULL
);
void
*
sender
=
sender_new
(
NULL
);
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
...
@@ -2950,7 +2950,7 @@ void TestRaft_leader_recv_appendentries_response_increase_commit_idx_using_votin
...
@@ -2950,7 +2950,7 @@ void TestRaft_leader_recv_appendentries_response_increase_commit_idx_using_votin
/* append entries - we need two */
/* append entries - we need two */
__RAFT_APPEND_ENTRY
(
r
,
1
,
1
,
"aaaa"
);
__RAFT_APPEND_ENTRY
(
r
,
1
,
1
,
"aaaa"
);
memset
(
&
aer
,
0
,
sizeof
(
msg
_appendentries_resp
onse
_t
));
memset
(
&
aer
,
0
,
sizeof
(
raft
_appendentries_resp_t
));
/* FIRST entry log application */
/* FIRST entry log application */
/* send appendentries -
/* send appendentries -
...
@@ -2975,7 +2975,7 @@ void TestRaft_leader_recv_appendentries_response_duplicate_does_not_decrement_ma
...
@@ -2975,7 +2975,7 @@ void TestRaft_leader_recv_appendentries_response_duplicate_does_not_decrement_ma
.
send_appendentries
=
sender_appendentries
,
.
send_appendentries
=
sender_appendentries
,
.
log
=
NULL
.
log
=
NULL
};
};
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
void
*
sender
=
sender_new
(
NULL
);
void
*
sender
=
sender_new
(
NULL
);
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
...
@@ -2995,7 +2995,7 @@ void TestRaft_leader_recv_appendentries_response_duplicate_does_not_decrement_ma
...
@@ -2995,7 +2995,7 @@ void TestRaft_leader_recv_appendentries_response_duplicate_does_not_decrement_ma
__RAFT_APPEND_ENTRY
(
r
,
1
,
1
,
"aaa"
);
__RAFT_APPEND_ENTRY
(
r
,
1
,
1
,
"aaa"
);
__RAFT_APPEND_ENTRY
(
r
,
2
,
1
,
"bbb"
);
__RAFT_APPEND_ENTRY
(
r
,
2
,
1
,
"bbb"
);
memset
(
&
aer
,
0
,
sizeof
(
msg
_appendentries_resp
onse
_t
));
memset
(
&
aer
,
0
,
sizeof
(
raft
_appendentries_resp_t
));
/* receive msg 1 */
/* receive msg 1 */
aer
.
term
=
1
;
aer
.
term
=
1
;
...
@@ -3028,7 +3028,7 @@ void TestRaft_leader_recv_appendentries_response_do_not_increase_commit_idx_beca
...
@@ -3028,7 +3028,7 @@ void TestRaft_leader_recv_appendentries_response_do_not_increase_commit_idx_beca
.
send_appendentries
=
sender_appendentries
,
.
send_appendentries
=
sender_appendentries
,
.
log
=
NULL
.
log
=
NULL
};
};
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
void
*
sender
=
sender_new
(
NULL
);
void
*
sender
=
sender_new
(
NULL
);
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
...
@@ -3050,7 +3050,7 @@ void TestRaft_leader_recv_appendentries_response_do_not_increase_commit_idx_beca
...
@@ -3050,7 +3050,7 @@ void TestRaft_leader_recv_appendentries_response_do_not_increase_commit_idx_beca
__RAFT_APPEND_ENTRY
(
r
,
2
,
1
,
"bbb"
);
__RAFT_APPEND_ENTRY
(
r
,
2
,
1
,
"bbb"
);
__RAFT_APPEND_ENTRY
(
r
,
3
,
2
,
"aaaa"
);
__RAFT_APPEND_ENTRY
(
r
,
3
,
2
,
"aaaa"
);
memset
(
&
aer
,
0
,
sizeof
(
msg
_appendentries_resp
onse
_t
));
memset
(
&
aer
,
0
,
sizeof
(
raft
_appendentries_resp_t
));
/* FIRST entry log application */
/* FIRST entry log application */
/* send appendentries -
/* send appendentries -
...
@@ -3108,7 +3108,7 @@ void TestRaft_leader_recv_appendentries_response_jumps_to_lower_next_idx(
...
@@ -3108,7 +3108,7 @@ void TestRaft_leader_recv_appendentries_response_jumps_to_lower_next_idx(
.
send_appendentries
=
sender_appendentries
,
.
send_appendentries
=
sender_appendentries
,
.
log
=
NULL
.
log
=
NULL
};
};
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
void
*
sender
=
sender_new
(
NULL
);
void
*
sender
=
sender_new
(
NULL
);
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
...
@@ -3122,7 +3122,7 @@ void TestRaft_leader_recv_appendentries_response_jumps_to_lower_next_idx(
...
@@ -3122,7 +3122,7 @@ void TestRaft_leader_recv_appendentries_response_jumps_to_lower_next_idx(
/* append entries */
/* append entries */
__RAFT_APPEND_ENTRIES_SEQ_ID_TERM
(
r
,
4
,
1
,
1
,
"aaaa"
);
__RAFT_APPEND_ENTRIES_SEQ_ID_TERM
(
r
,
4
,
1
,
1
,
"aaaa"
);
msg
_appendentries_
t
*
ae
;
raft
_appendentries_
req_t
*
ae
;
/* become leader sets next_idx to current_idx
/* become leader sets next_idx to current_idx
* it also appends a NO_OP, and as raft_send_appendentries()
* it also appends a NO_OP, and as raft_send_appendentries()
...
@@ -3137,7 +3137,7 @@ void TestRaft_leader_recv_appendentries_response_jumps_to_lower_next_idx(
...
@@ -3137,7 +3137,7 @@ void TestRaft_leader_recv_appendentries_response_jumps_to_lower_next_idx(
CuAssertIntEquals
(
tc
,
4
,
ae
->
prev_log_idx
);
CuAssertIntEquals
(
tc
,
4
,
ae
->
prev_log_idx
);
/* receive mock success responses */
/* receive mock success responses */
memset
(
&
aer
,
0
,
sizeof
(
msg
_appendentries_resp
onse
_t
));
memset
(
&
aer
,
0
,
sizeof
(
raft
_appendentries_resp_t
));
aer
.
term
=
4
;
aer
.
term
=
4
;
aer
.
success
=
0
;
aer
.
success
=
0
;
aer
.
current_idx
=
1
;
aer
.
current_idx
=
1
;
...
@@ -3153,7 +3153,7 @@ void TestRaft_leader_recv_appendentries_response_jumps_to_lower_next_idx(
...
@@ -3153,7 +3153,7 @@ void TestRaft_leader_recv_appendentries_response_jumps_to_lower_next_idx(
CuAssertIntEquals
(
tc
,
4
,
ae
->
n_entries
);
CuAssertIntEquals
(
tc
,
4
,
ae
->
n_entries
);
/* receive mock success responses */
/* receive mock success responses */
memset
(
&
aer
,
0
,
sizeof
(
msg
_appendentries_resp
onse
_t
));
memset
(
&
aer
,
0
,
sizeof
(
raft
_appendentries_resp_t
));
aer
.
term
=
4
;
aer
.
term
=
4
;
aer
.
success
=
1
;
aer
.
success
=
1
;
aer
.
current_idx
=
5
;
aer
.
current_idx
=
5
;
...
@@ -3195,8 +3195,8 @@ void TestRaft_leader_recv_appendentries_response_retry_only_if_leader(CuTest * t
...
@@ -3195,8 +3195,8 @@ void TestRaft_leader_recv_appendentries_response_retry_only_if_leader(CuTest * t
raft_become_follower
(
r
);
raft_become_follower
(
r
);
/* receive mock success responses */
/* receive mock success responses */
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
memset
(
&
aer
,
0
,
sizeof
(
msg
_appendentries_resp
onse
_t
));
memset
(
&
aer
,
0
,
sizeof
(
raft
_appendentries_resp_t
));
aer
.
term
=
1
;
aer
.
term
=
1
;
aer
.
success
=
1
;
aer
.
success
=
1
;
aer
.
current_idx
=
1
;
aer
.
current_idx
=
1
;
...
@@ -3222,8 +3222,8 @@ void TestRaft_leader_recv_appendentries_response_without_node_fails(CuTest * tc)
...
@@ -3222,8 +3222,8 @@ void TestRaft_leader_recv_appendentries_response_without_node_fails(CuTest * tc)
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
/* receive mock success responses */
/* receive mock success responses */
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
memset
(
&
aer
,
0
,
sizeof
(
msg
_appendentries_resp
onse
_t
));
memset
(
&
aer
,
0
,
sizeof
(
raft
_appendentries_resp_t
));
aer
.
term
=
1
;
aer
.
term
=
1
;
aer
.
success
=
1
;
aer
.
success
=
1
;
aer
.
current_idx
=
0
;
aer
.
current_idx
=
0
;
...
@@ -3241,10 +3241,10 @@ void TestRaft_leader_recv_entry_resets_election_timeout(
...
@@ -3241,10 +3241,10 @@ void TestRaft_leader_recv_entry_resets_election_timeout(
raft_periodic
(
r
,
900
);
raft_periodic
(
r
,
900
);
/* entry message */
/* entry message */
msg
_entry_t
*
mety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
mety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_recv_entry
(
r
,
mety
,
&
cr
);
raft_recv_entry
(
r
,
mety
,
&
cr
);
CuAssertTrue
(
tc
,
0
==
raft_get_timeout_elapsed
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_timeout_elapsed
(
r
));
}
}
...
@@ -3267,10 +3267,10 @@ void TestRaft_leader_recv_entry_is_committed_returns_0_if_not_committed(CuTest *
...
@@ -3267,10 +3267,10 @@ void TestRaft_leader_recv_entry_is_committed_returns_0_if_not_committed(CuTest *
raft_set_commit_idx
(
r
,
0
);
raft_set_commit_idx
(
r
,
0
);
/* entry message */
/* entry message */
msg
_entry_t
*
mety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
mety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_recv_entry
(
r
,
mety
,
&
cr
);
raft_recv_entry
(
r
,
mety
,
&
cr
);
CuAssertTrue
(
tc
,
0
==
raft_msg_entry_response_committed
(
r
,
&
cr
));
CuAssertTrue
(
tc
,
0
==
raft_msg_entry_response_committed
(
r
,
&
cr
));
...
@@ -3296,10 +3296,10 @@ void TestRaft_leader_recv_entry_is_committed_returns_neg_1_if_invalidated(CuTest
...
@@ -3296,10 +3296,10 @@ void TestRaft_leader_recv_entry_is_committed_returns_neg_1_if_invalidated(CuTest
raft_set_commit_idx
(
r
,
0
);
raft_set_commit_idx
(
r
,
0
);
/* entry message */
/* entry message */
msg
_entry_t
*
mety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
mety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_recv_entry
(
r
,
mety
,
&
cr
);
raft_recv_entry
(
r
,
mety
,
&
cr
);
CuAssertTrue
(
tc
,
0
==
raft_msg_entry_response_committed
(
r
,
&
cr
));
CuAssertTrue
(
tc
,
0
==
raft_msg_entry_response_committed
(
r
,
&
cr
));
CuAssertTrue
(
tc
,
cr
.
term
==
1
);
CuAssertTrue
(
tc
,
cr
.
term
==
1
);
...
@@ -3308,13 +3308,13 @@ void TestRaft_leader_recv_entry_is_committed_returns_neg_1_if_invalidated(CuTest
...
@@ -3308,13 +3308,13 @@ void TestRaft_leader_recv_entry_is_committed_returns_neg_1_if_invalidated(CuTest
CuAssertTrue
(
tc
,
0
==
raft_get_commit_idx
(
r
));
CuAssertTrue
(
tc
,
0
==
raft_get_commit_idx
(
r
));
/* append entry that invalidates entry message */
/* append entry that invalidates entry message */
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
leader_commit
=
1
;
ae
.
leader_commit
=
1
;
ae
.
term
=
2
;
ae
.
term
=
2
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_idx
=
0
;
ae
.
prev_log_term
=
0
;
ae
.
prev_log_term
=
0
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
ae
.
entries
=
__MAKE_ENTRY_ARRAY
(
999
,
2
,
"aaa"
);
ae
.
entries
=
__MAKE_ENTRY_ARRAY
(
999
,
2
,
"aaa"
);
ae
.
n_entries
=
1
;
ae
.
n_entries
=
1
;
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
...
@@ -3342,10 +3342,10 @@ void TestRaft_leader_recv_entry_fails_if_prevlogidx_less_than_commit(CuTest * tc
...
@@ -3342,10 +3342,10 @@ void TestRaft_leader_recv_entry_fails_if_prevlogidx_less_than_commit(CuTest * tc
raft_set_commit_idx
(
r
,
0
);
raft_set_commit_idx
(
r
,
0
);
/* entry message */
/* entry message */
msg
_entry_t
*
mety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
mety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_recv_entry
(
r
,
mety
,
&
cr
);
raft_recv_entry
(
r
,
mety
,
&
cr
);
CuAssertTrue
(
tc
,
0
==
raft_msg_entry_response_committed
(
r
,
&
cr
));
CuAssertTrue
(
tc
,
0
==
raft_msg_entry_response_committed
(
r
,
&
cr
));
CuAssertTrue
(
tc
,
cr
.
term
==
2
);
CuAssertTrue
(
tc
,
cr
.
term
==
2
);
...
@@ -3356,13 +3356,13 @@ void TestRaft_leader_recv_entry_fails_if_prevlogidx_less_than_commit(CuTest * tc
...
@@ -3356,13 +3356,13 @@ void TestRaft_leader_recv_entry_fails_if_prevlogidx_less_than_commit(CuTest * tc
raft_set_commit_idx
(
r
,
1
);
raft_set_commit_idx
(
r
,
1
);
/* append entry that invalidates entry message */
/* append entry that invalidates entry message */
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
leader_commit
=
1
;
ae
.
leader_commit
=
1
;
ae
.
term
=
2
;
ae
.
term
=
2
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_idx
=
1
;
ae
.
prev_log_term
=
1
;
ae
.
prev_log_term
=
1
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
ae
.
entries
=
__MAKE_ENTRY_ARRAY
(
999
,
2
,
"aaa"
);
ae
.
entries
=
__MAKE_ENTRY_ARRAY
(
999
,
2
,
"aaa"
);
ae
.
n_entries
=
1
;
ae
.
n_entries
=
1
;
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
raft_recv_appendentries
(
r
,
raft_get_node
(
r
,
2
),
&
ae
,
&
aer
);
...
@@ -3400,14 +3400,14 @@ void TestRaft_leader_recv_entry_does_not_send_new_appendentries_to_slow_nodes(Cu
...
@@ -3400,14 +3400,14 @@ void TestRaft_leader_recv_entry_does_not_send_new_appendentries_to_slow_nodes(Cu
__RAFT_APPEND_ENTRY
(
r
,
1
,
1
,
"aaaa"
);
__RAFT_APPEND_ENTRY
(
r
,
1
,
1
,
"aaaa"
);
/* entry message */
/* entry message */
msg
_entry_t
*
mety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
mety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_recv_entry
(
r
,
mety
,
&
cr
);
raft_recv_entry
(
r
,
mety
,
&
cr
);
/* check if the slow node got sent this appendentries */
/* check if the slow node got sent this appendentries */
msg
_appendentries_
t
*
ae
;
raft
_appendentries_
req_t
*
ae
;
ae
=
sender_poll_msg_data
(
sender
);
ae
=
sender_poll_msg_data
(
sender
);
CuAssertTrue
(
tc
,
NULL
==
ae
);
CuAssertTrue
(
tc
,
NULL
==
ae
);
}
}
...
@@ -3440,8 +3440,8 @@ void TestRaft_leader_recv_appendentries_response_failure_does_not_set_node_nexti
...
@@ -3440,8 +3440,8 @@ void TestRaft_leader_recv_appendentries_response_failure_does_not_set_node_nexti
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
2
));
raft_send_appendentries
(
r
,
raft_get_node
(
r
,
2
));
/* receive mock success response */
/* receive mock success response */
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
memset
(
&
aer
,
0
,
sizeof
(
msg
_appendentries_resp
onse
_t
));
memset
(
&
aer
,
0
,
sizeof
(
raft
_appendentries_resp_t
));
aer
.
term
=
1
;
aer
.
term
=
1
;
aer
.
success
=
0
;
aer
.
success
=
0
;
aer
.
current_idx
=
0
;
aer
.
current_idx
=
0
;
...
@@ -3475,7 +3475,7 @@ void TestRaft_leader_recv_appendentries_response_increment_idx_of_node(
...
@@ -3475,7 +3475,7 @@ void TestRaft_leader_recv_appendentries_response_increment_idx_of_node(
CuAssertTrue
(
tc
,
1
==
raft_node_get_next_idx
(
p
));
CuAssertTrue
(
tc
,
1
==
raft_node_get_next_idx
(
p
));
/* receive mock success responses */
/* receive mock success responses */
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
aer
.
term
=
1
;
aer
.
term
=
1
;
aer
.
success
=
1
;
aer
.
success
=
1
;
aer
.
current_idx
=
0
;
aer
.
current_idx
=
0
;
...
@@ -3506,7 +3506,7 @@ void TestRaft_leader_recv_appendentries_response_drop_message_if_term_is_old(
...
@@ -3506,7 +3506,7 @@ void TestRaft_leader_recv_appendentries_response_drop_message_if_term_is_old(
CuAssertTrue
(
tc
,
1
==
raft_node_get_next_idx
(
p
));
CuAssertTrue
(
tc
,
1
==
raft_node_get_next_idx
(
p
));
/* receive OLD mock success responses */
/* receive OLD mock success responses */
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
aer
.
term
=
1
;
aer
.
term
=
1
;
aer
.
success
=
1
;
aer
.
success
=
1
;
aer
.
current_idx
=
1
;
aer
.
current_idx
=
1
;
...
@@ -3536,7 +3536,7 @@ void TestRaft_leader_recv_appendentries_response_steps_down_if_term_is_newer(
...
@@ -3536,7 +3536,7 @@ void TestRaft_leader_recv_appendentries_response_steps_down_if_term_is_newer(
CuAssertTrue
(
tc
,
1
==
raft_node_get_next_idx
(
p
));
CuAssertTrue
(
tc
,
1
==
raft_node_get_next_idx
(
p
));
/* receive NEW mock failed responses */
/* receive NEW mock failed responses */
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
aer
.
term
=
3
;
aer
.
term
=
3
;
aer
.
success
=
0
;
aer
.
success
=
0
;
aer
.
current_idx
=
2
;
aer
.
current_idx
=
2
;
...
@@ -3555,8 +3555,8 @@ void TestRaft_leader_recv_appendentries_steps_down_if_newer(
...
@@ -3555,8 +3555,8 @@ void TestRaft_leader_recv_appendentries_steps_down_if_newer(
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -3567,7 +3567,7 @@ void TestRaft_leader_recv_appendentries_steps_down_if_newer(
...
@@ -3567,7 +3567,7 @@ void TestRaft_leader_recv_appendentries_steps_down_if_newer(
CuAssertTrue
(
tc
,
1
==
raft_is_leader
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_is_leader
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_leader_id
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_get_leader_id
(
r
));
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
6
;
ae
.
term
=
6
;
ae
.
leader_id
=
2
;
ae
.
leader_id
=
2
;
ae
.
prev_log_idx
=
6
;
ae
.
prev_log_idx
=
6
;
...
@@ -3590,8 +3590,8 @@ void TestRaft_leader_recv_appendentries_steps_down_if_newer_term(
...
@@ -3590,8 +3590,8 @@ void TestRaft_leader_recv_appendentries_steps_down_if_newer_term(
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -3599,7 +3599,7 @@ void TestRaft_leader_recv_appendentries_steps_down_if_newer_term(
...
@@ -3599,7 +3599,7 @@ void TestRaft_leader_recv_appendentries_steps_down_if_newer_term(
raft_set_state
(
r
,
RAFT_STATE_LEADER
);
raft_set_state
(
r
,
RAFT_STATE_LEADER
);
raft_set_current_term
(
r
,
5
);
raft_set_current_term
(
r
,
5
);
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
6
;
ae
.
term
=
6
;
ae
.
prev_log_idx
=
5
;
ae
.
prev_log_idx
=
5
;
ae
.
prev_log_term
=
5
;
ae
.
prev_log_term
=
5
;
...
@@ -3631,7 +3631,7 @@ void TestRaft_leader_sends_empty_appendentries_every_request_timeout(
...
@@ -3631,7 +3631,7 @@ void TestRaft_leader_sends_empty_appendentries_every_request_timeout(
raft_become_leader
(
r
);
raft_become_leader
(
r
);
/* receive appendentries messages for both nodes */
/* receive appendentries messages for both nodes */
msg
_appendentries_
t
*
ae
;
raft
_appendentries_
req_t
*
ae
;
ae
=
sender_poll_msg_data
(
sender
);
ae
=
sender_poll_msg_data
(
sender
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
ae
=
sender_poll_msg_data
(
sender
);
ae
=
sender_poll_msg_data
(
sender
);
...
@@ -3672,7 +3672,7 @@ void TestRaft_leader_recv_requestvote_responds_without_granting(CuTest * tc)
...
@@ -3672,7 +3672,7 @@ void TestRaft_leader_recv_requestvote_responds_without_granting(CuTest * tc)
raft_election_start
(
r
,
0
);
raft_election_start
(
r
,
0
);
msg
_requestvote_resp
onse
_t
rvr
=
{
raft
_requestvote_resp_t
rvr
=
{
.
prevote
=
1
,
.
prevote
=
1
,
.
request_term
=
raft_get_current_term
(
r
)
+
1
,
.
request_term
=
raft_get_current_term
(
r
)
+
1
,
.
term
=
0
,
.
term
=
0
,
...
@@ -3682,7 +3682,7 @@ void TestRaft_leader_recv_requestvote_responds_without_granting(CuTest * tc)
...
@@ -3682,7 +3682,7 @@ void TestRaft_leader_recv_requestvote_responds_without_granting(CuTest * tc)
raft_recv_requestvote_response
(
r
,
raft_get_node
(
r
,
2
),
&
rvr
);
raft_recv_requestvote_response
(
r
,
raft_get_node
(
r
,
2
),
&
rvr
);
CuAssertTrue
(
tc
,
1
==
raft_is_candidate
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_is_candidate
(
r
));
msg
_requestvote_resp
onse
_t
rvr1
=
{
raft
_requestvote_resp_t
rvr1
=
{
.
request_term
=
1
,
.
request_term
=
1
,
.
term
=
1
,
.
term
=
1
,
.
vote_granted
=
1
.
vote_granted
=
1
...
@@ -3692,7 +3692,7 @@ void TestRaft_leader_recv_requestvote_responds_without_granting(CuTest * tc)
...
@@ -3692,7 +3692,7 @@ void TestRaft_leader_recv_requestvote_responds_without_granting(CuTest * tc)
CuAssertTrue
(
tc
,
1
==
raft_is_leader
(
r
));
CuAssertTrue
(
tc
,
1
==
raft_is_leader
(
r
));
/* receive request vote from node 3 */
/* receive request vote from node 3 */
msg
_requestvote_t
rv
=
{
raft
_requestvote_
req_
t
rv
=
{
.
term
=
1
.
term
=
1
};
};
...
@@ -3733,8 +3733,8 @@ void T_estRaft_leader_recv_requestvote_responds_with_granting_if_term_is_higher(
...
@@ -3733,8 +3733,8 @@ void T_estRaft_leader_recv_requestvote_responds_with_granting_if_term_is_higher(
CuAssertTrue(tc, 1 == raft_is_leader(r));
CuAssertTrue(tc, 1 == raft_is_leader(r));
/* receive request vote from node 3 */
/* receive request vote from node 3 */
msg
_requestvote_t rv;
raft
_requestvote_
req_
t rv;
memset(&rv, 0, sizeof(
msg
_requestvote_t));
memset(&rv, 0, sizeof(
raft
_requestvote_
req_
t));
rv.term = 2;
rv.term = 2;
raft_recv_requestvote(r, raft_get_node(r, 3), &rv, &rvr);
raft_recv_requestvote(r, raft_get_node(r, 3), &rv, &rvr);
CuAssertTrue(tc, 1 == raft_is_follower(r));
CuAssertTrue(tc, 1 == raft_is_follower(r));
...
@@ -3772,7 +3772,7 @@ void TestRaft_leader_recv_entry_add_nonvoting_node_remove_and_revert(CuTest *tc)
...
@@ -3772,7 +3772,7 @@ void TestRaft_leader_recv_entry_add_nonvoting_node_remove_and_revert(CuTest *tc)
/* Add the non-voting node */
/* Add the non-voting node */
raft_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"3"
);
raft_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"3"
);
ety
->
type
=
RAFT_LOGTYPE_ADD_NONVOTING_NODE
;
ety
->
type
=
RAFT_LOGTYPE_ADD_NONVOTING_NODE
;
msg
_entry_resp
onse
_t
etyr
;
raft
_entry_resp_t
etyr
;
CuAssertIntEquals
(
tc
,
0
,
raft_recv_entry
(
r
,
ety
,
&
etyr
));
CuAssertIntEquals
(
tc
,
0
,
raft_recv_entry
(
r
,
ety
,
&
etyr
));
CuAssertIntEquals
(
tc
,
1
,
raft_node_is_active
(
raft_get_node
(
r
,
3
)));
CuAssertIntEquals
(
tc
,
1
,
raft_node_is_active
(
raft_get_node
(
r
,
3
)));
CuAssertIntEquals
(
tc
,
0
,
raft_node_is_voting
(
raft_get_node
(
r
,
3
)));
CuAssertIntEquals
(
tc
,
0
,
raft_node_is_voting
(
raft_get_node
(
r
,
3
)));
...
@@ -3818,14 +3818,14 @@ void TestRaft_leader_recv_appendentries_response_set_has_sufficient_logs_after_v
...
@@ -3818,14 +3818,14 @@ void TestRaft_leader_recv_appendentries_response_set_has_sufficient_logs_after_v
/* Add two non-voting nodes */
/* Add two non-voting nodes */
raft_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"2"
);
raft_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"2"
);
ety
->
type
=
RAFT_LOGTYPE_ADD_NONVOTING_NODE
;
ety
->
type
=
RAFT_LOGTYPE_ADD_NONVOTING_NODE
;
msg
_entry_resp
onse
_t
etyr
;
raft
_entry_resp_t
etyr
;
CuAssertIntEquals
(
tc
,
0
,
raft_recv_entry
(
r
,
ety
,
&
etyr
));
CuAssertIntEquals
(
tc
,
0
,
raft_recv_entry
(
r
,
ety
,
&
etyr
));
ety
=
__MAKE_ENTRY
(
2
,
1
,
"3"
);
ety
=
__MAKE_ENTRY
(
2
,
1
,
"3"
);
ety
->
type
=
RAFT_LOGTYPE_ADD_NONVOTING_NODE
;
ety
->
type
=
RAFT_LOGTYPE_ADD_NONVOTING_NODE
;
CuAssertIntEquals
(
tc
,
0
,
raft_recv_entry
(
r
,
ety
,
&
etyr
));
CuAssertIntEquals
(
tc
,
0
,
raft_recv_entry
(
r
,
ety
,
&
etyr
));
msg
_appendentries_resp
onse
_t
aer
=
{
raft
_appendentries_resp_t
aer
=
{
.
term
=
1
,
.
success
=
1
,
.
current_idx
=
2
.
term
=
1
,
.
success
=
1
,
.
current_idx
=
2
};
};
...
@@ -3894,7 +3894,7 @@ void TestRaft_read_action_callback(
...
@@ -3894,7 +3894,7 @@ void TestRaft_read_action_callback(
CuAssertIntEquals
(
tc
,
0
,
ra
.
calls
);
CuAssertIntEquals
(
tc
,
0
,
ra
.
calls
);
/* acked by node 2 - enough for quorum */
/* acked by node 2 - enough for quorum */
msg
_appendentries_resp
onse
_t
aer
=
{
.
msg_id
=
1
,
.
term
=
1
,
.
success
=
1
,
.
current_idx
=
1
};
raft
_appendentries_resp_t
aer
=
{
.
msg_id
=
1
,
.
term
=
1
,
.
success
=
1
,
.
current_idx
=
1
};
CuAssertIntEquals
(
tc
,
0
,
raft_recv_appendentries_response
(
r
,
raft_get_node
(
r
,
2
),
&
aer
));
CuAssertIntEquals
(
tc
,
0
,
raft_recv_appendentries_response
(
r
,
raft_get_node
(
r
,
2
),
&
aer
));
raft_periodic
(
r
,
1
);
raft_periodic
(
r
,
1
);
...
@@ -3986,14 +3986,14 @@ void TestRaft_server_recv_requestvote_with_transfer_node(CuTest * tc)
...
@@ -3986,14 +3986,14 @@ void TestRaft_server_recv_requestvote_with_transfer_node(CuTest * tc)
raft_set_state
(
r
,
RAFT_STATE_LEADER
);
raft_set_state
(
r
,
RAFT_STATE_LEADER
);
/* setup requestvote struct */
/* setup requestvote struct */
msg
_requestvote_t
rv
=
{
raft
_requestvote_
req_
t
rv
=
{
.
prevote
=
1
,
.
prevote
=
1
,
.
term
=
2
,
.
term
=
2
,
.
candidate_id
=
2
,
.
candidate_id
=
2
,
.
last_log_idx
=
0
,
.
last_log_idx
=
0
,
.
last_log_term
=
1
.
last_log_term
=
1
};
};
msg
_requestvote_resp
onse
_t
rvr
;
raft
_requestvote_resp_t
rvr
;
/* test #1: try to request a vote with prevote flag */
/* test #1: try to request a vote with prevote flag */
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
raft_recv_requestvote
(
r
,
raft_get_node
(
r
,
2
),
&
rv
,
&
rvr
);
...
@@ -4152,7 +4152,7 @@ void TestRaft_callback_timeoutnow_at_send_appendentries_response_if_up_to_date(C
...
@@ -4152,7 +4152,7 @@ void TestRaft_callback_timeoutnow_at_send_appendentries_response_if_up_to_date(C
CuAssertIntEquals
(
tc
,
0
,
ret
);
CuAssertIntEquals
(
tc
,
0
,
ret
);
CuAssertTrue
(
tc
,
0
==
timeoutnow_sent
);
CuAssertTrue
(
tc
,
0
==
timeoutnow_sent
);
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
aer
.
term
=
2
;
aer
.
term
=
2
;
aer
.
success
=
1
;
aer
.
success
=
1
;
aer
.
current_idx
=
2
;
aer
.
current_idx
=
2
;
...
@@ -4213,9 +4213,9 @@ void TestRaft_vote_for_unknown_node(CuTest * tc)
...
@@ -4213,9 +4213,9 @@ void TestRaft_vote_for_unknown_node(CuTest * tc)
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
msg
_requestvote_resp
onse
_t
resp
;
raft
_requestvote_resp_t
resp
;
msg
_requestvote_t
req
=
{
raft
_requestvote_
req_
t
req
=
{
.
term
=
2
,
.
term
=
2
,
.
last_log_idx
=
1
,
.
last_log_idx
=
1
,
.
last_log_term
=
1
,
.
last_log_term
=
1
,
...
@@ -4239,9 +4239,9 @@ void TestRaft_recv_appendreq_from_unknown_node(CuTest * tc)
...
@@ -4239,9 +4239,9 @@ void TestRaft_recv_appendreq_from_unknown_node(CuTest * tc)
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
raft_become_leader
(
r
);
raft_become_leader
(
r
);
msg
_appendentries_resp
onse
_t
resp
;
raft
_appendentries_resp_t
resp
;
msg
_appendentries_t
req
=
{
raft
_appendentries_
req_
t
req
=
{
.
term
=
1
,
.
term
=
1
,
// not part of the configuration
// not part of the configuration
...
@@ -4257,7 +4257,7 @@ void TestRaft_recv_appendreq_from_unknown_node(CuTest * tc)
...
@@ -4257,7 +4257,7 @@ void TestRaft_recv_appendreq_from_unknown_node(CuTest * tc)
CuAssertPtrEquals
(
tc
,
NULL
,
raft_get_leader_node
(
r
));
CuAssertPtrEquals
(
tc
,
NULL
,
raft_get_leader_node
(
r
));
// Receive it again to verify everything is ok
// Receive it again to verify everything is ok
resp
=
(
msg
_appendentries_resp
onse
_t
){
0
};
resp
=
(
raft
_appendentries_resp_t
){
0
};
raft_recv_appendentries
(
r
,
NULL
,
&
req
,
&
resp
);
raft_recv_appendentries
(
r
,
NULL
,
&
req
,
&
resp
);
CuAssertTrue
(
tc
,
resp
.
success
==
1
);
CuAssertTrue
(
tc
,
resp
.
success
==
1
);
...
@@ -4279,12 +4279,12 @@ void TestRaft_unknown_node_can_become_leader(CuTest * tc)
...
@@ -4279,12 +4279,12 @@ void TestRaft_unknown_node_can_become_leader(CuTest * tc)
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
msg
_appendentries_resp
onse
_t
resp
;
raft
_appendentries_resp_t
resp
;
raft_entry_t
**
entries
=
__MAKE_ENTRY_ARRAY
(
1
,
1
,
"100"
);
raft_entry_t
**
entries
=
__MAKE_ENTRY_ARRAY
(
1
,
1
,
"100"
);
entries
[
0
]
->
type
=
RAFT_LOGTYPE_ADD_NONVOTING_NODE
;
entries
[
0
]
->
type
=
RAFT_LOGTYPE_ADD_NONVOTING_NODE
;
msg
_appendentries_t
req_append
=
{
raft
_appendentries_
req_
t
req_append
=
{
.
term
=
1
,
.
term
=
1
,
.
prev_log_idx
=
0
,
.
prev_log_idx
=
0
,
.
prev_log_term
=
0
,
.
prev_log_term
=
0
,
...
@@ -4300,7 +4300,7 @@ void TestRaft_unknown_node_can_become_leader(CuTest * tc)
...
@@ -4300,7 +4300,7 @@ void TestRaft_unknown_node_can_become_leader(CuTest * tc)
CuAssertTrue
(
tc
,
resp
.
success
==
1
);
CuAssertTrue
(
tc
,
resp
.
success
==
1
);
// Send another req with incremented leader_commit to commit the addition
// Send another req with incremented leader_commit to commit the addition
msg
_appendentries_t
req_commit
=
{
raft
_appendentries_
req_
t
req_commit
=
{
.
term
=
1
,
.
term
=
1
,
.
prev_log_idx
=
1
,
.
prev_log_idx
=
1
,
.
prev_log_term
=
1
,
.
prev_log_term
=
1
,
...
@@ -4329,7 +4329,7 @@ void TestRaft_unknown_node_can_become_leader(CuTest * tc)
...
@@ -4329,7 +4329,7 @@ void TestRaft_unknown_node_can_become_leader(CuTest * tc)
entries
=
__MAKE_ENTRY_ARRAY
(
1
,
1
,
"100"
);
entries
=
__MAKE_ENTRY_ARRAY
(
1
,
1
,
"100"
);
entries
[
0
]
->
type
=
RAFT_LOGTYPE_ADD_NODE
;
entries
[
0
]
->
type
=
RAFT_LOGTYPE_ADD_NODE
;
msg
_appendentries_t
req_add_node
=
{
raft
_appendentries_
req_
t
req_add_node
=
{
.
term
=
1
,
.
term
=
1
,
.
leader_id
=
100
,
.
leader_id
=
100
,
.
msg_id
=
1
,
.
msg_id
=
1
,
...
@@ -4370,7 +4370,7 @@ void TestRaft_removed_node_starts_election(CuTest * tc)
...
@@ -4370,7 +4370,7 @@ void TestRaft_removed_node_starts_election(CuTest * tc)
raft_set_current_term
(
r
,
1
);
raft_set_current_term
(
r
,
1
);
raft_become_leader
(
r
);
raft_become_leader
(
r
);
msg
_entry_resp
onse
_t
entry_resp
;
raft
_entry_resp_t
entry_resp
;
raft_entry_t
*
entry
=
__MAKE_ENTRY
(
1
,
1
,
"1"
);
raft_entry_t
*
entry
=
__MAKE_ENTRY
(
1
,
1
,
"1"
);
entry
->
type
=
RAFT_LOGTYPE_REMOVE_NODE
;
entry
->
type
=
RAFT_LOGTYPE_REMOVE_NODE
;
...
@@ -4385,7 +4385,7 @@ void TestRaft_removed_node_starts_election(CuTest * tc)
...
@@ -4385,7 +4385,7 @@ void TestRaft_removed_node_starts_election(CuTest * tc)
raft_periodic
(
r
,
2000
);
raft_periodic
(
r
,
2000
);
raft_become_candidate
(
r
);
raft_become_candidate
(
r
);
msg
_requestvote_resp
onse
_t
reqresp
=
{
raft
_requestvote_resp_t
reqresp
=
{
.
request_term
=
2
,
.
request_term
=
2
,
.
vote_granted
=
1
,
.
vote_granted
=
1
,
.
term
=
2
.
term
=
2
...
@@ -4400,7 +4400,8 @@ void TestRaft_removed_node_starts_election(CuTest * tc)
...
@@ -4400,7 +4400,8 @@ void TestRaft_removed_node_starts_election(CuTest * tc)
}
}
int
cb_send_appendentries
(
raft_server_t
*
raft
,
int
cb_send_appendentries
(
raft_server_t
*
raft
,
void
*
udata
,
raft_node_t
*
node
,
msg_appendentries_t
*
msg
)
void
*
udata
,
raft_node_t
*
node
,
raft_appendentries_req_t
*
msg
)
{
{
CuTest
*
tc
=
udata
;
CuTest
*
tc
=
udata
;
CuAssertIntEquals
(
tc
,
raft_get_nodeid
(
raft
),
msg
->
leader_id
);
CuAssertIntEquals
(
tc
,
raft_get_nodeid
(
raft
),
msg
->
leader_id
);
...
@@ -4491,8 +4492,8 @@ void Test_transfer_leader_success(CuTest *tc)
...
@@ -4491,8 +4492,8 @@ void Test_transfer_leader_success(CuTest *tc)
int
ret
=
raft_transfer_leader
(
r
,
2
,
0
);
int
ret
=
raft_transfer_leader
(
r
,
2
,
0
);
CuAssertIntEquals
(
tc
,
0
,
ret
);
CuAssertIntEquals
(
tc
,
0
,
ret
);
msg
_appendentries_t
ae
=
{
0
};
raft
_appendentries_
req_
t
ae
=
{
0
};
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
leader_id
=
2
;
ae
.
leader_id
=
2
;
...
@@ -4518,8 +4519,8 @@ void Test_transfer_leader_unexpected(CuTest *tc)
...
@@ -4518,8 +4519,8 @@ void Test_transfer_leader_unexpected(CuTest *tc)
int
ret
=
raft_transfer_leader
(
r
,
3
,
0
);
int
ret
=
raft_transfer_leader
(
r
,
3
,
0
);
CuAssertIntEquals
(
tc
,
0
,
ret
);
CuAssertIntEquals
(
tc
,
0
,
ret
);
msg
_appendentries_t
ae
=
{
0
};
raft
_appendentries_
req_
t
ae
=
{
0
};
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
ae
.
term
=
1
;
ae
.
term
=
1
;
ae
.
leader_id
=
2
;
ae
.
leader_id
=
2
;
...
...
tests/test_snapshotting.c
View file @
8ee3f264
...
@@ -45,7 +45,7 @@ static int __raft_applylog(
...
@@ -45,7 +45,7 @@ static int __raft_applylog(
static
int
__raft_send_requestvote
(
raft_server_t
*
raft
,
static
int
__raft_send_requestvote
(
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_requestvote_t
*
msg
)
raft
_requestvote_
req_
t
*
msg
)
{
{
return
0
;
return
0
;
}
}
...
@@ -53,7 +53,7 @@ static int __raft_send_requestvote(raft_server_t* raft,
...
@@ -53,7 +53,7 @@ static int __raft_send_requestvote(raft_server_t* raft,
static
int
__raft_send_appendentries
(
raft_server_t
*
raft
,
static
int
__raft_send_appendentries
(
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_appendentries_t
*
msg
)
raft
_appendentries_
req_
t
*
msg
)
{
{
return
0
;
return
0
;
}
}
...
@@ -61,16 +61,16 @@ static int __raft_send_appendentries(raft_server_t* raft,
...
@@ -61,16 +61,16 @@ static int __raft_send_appendentries(raft_server_t* raft,
static
int
__raft_send_appendentries_capture
(
raft_server_t
*
raft
,
static
int
__raft_send_appendentries_capture
(
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_appendentries_t
*
msg
)
raft
_appendentries_
req_
t
*
msg
)
{
{
*
((
msg
_appendentries_t
*
)
udata
)
=
*
msg
;
*
((
raft
_appendentries_
req_
t
*
)
udata
)
=
*
msg
;
return
0
;
return
0
;
}
}
static
int
__raft_send_snapshot_increment
(
raft_server_t
*
raft
,
static
int
__raft_send_snapshot_increment
(
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_snapshot_t
*
msg
)
raft
_snapshot_
req_
t
*
msg
)
{
{
int
*
counter
=
udata
;
int
*
counter
=
udata
;
...
@@ -122,7 +122,7 @@ struct test_data
...
@@ -122,7 +122,7 @@ struct test_data
static
int
test_send_snapshot_increment
(
raft_server_t
*
raft
,
static
int
test_send_snapshot_increment
(
raft_server_t
*
raft
,
void
*
udata
,
void
*
udata
,
raft_node_t
*
node
,
raft_node_t
*
node
,
msg
_snapshot_t
*
msg
)
raft
_snapshot_
req_
t
*
msg
)
{
{
struct
test_data
*
t
=
udata
;
struct
test_data
*
t
=
udata
;
...
@@ -208,7 +208,7 @@ void TestRaft_leader_begin_snapshot_fails_if_no_logs_to_compact(CuTest * tc)
...
@@ -208,7 +208,7 @@ void TestRaft_leader_begin_snapshot_fails_if_no_logs_to_compact(CuTest * tc)
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -218,7 +218,7 @@ void TestRaft_leader_begin_snapshot_fails_if_no_logs_to_compact(CuTest * tc)
...
@@ -218,7 +218,7 @@ void TestRaft_leader_begin_snapshot_fails_if_no_logs_to_compact(CuTest * tc)
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
/* entry message */
/* entry message */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
raft_recv_entry
(
r
,
ety
,
&
cr
);
raft_recv_entry
(
r
,
ety
,
&
cr
);
...
@@ -241,7 +241,7 @@ void TestRaft_leader_will_not_apply_entry_if_snapshot_is_in_progress(CuTest * tc
...
@@ -241,7 +241,7 @@ void TestRaft_leader_will_not_apply_entry_if_snapshot_is_in_progress(CuTest * tc
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -251,7 +251,7 @@ void TestRaft_leader_will_not_apply_entry_if_snapshot_is_in_progress(CuTest * tc
...
@@ -251,7 +251,7 @@ void TestRaft_leader_will_not_apply_entry_if_snapshot_is_in_progress(CuTest * tc
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
/* entry message */
/* entry message */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
raft_recv_entry
(
r
,
ety
,
&
cr
);
raft_recv_entry
(
r
,
ety
,
&
cr
);
...
@@ -293,7 +293,7 @@ void TestRaft_leader_snapshot_begin_fails_if_less_than_2_logs_to_compact(CuTest
...
@@ -293,7 +293,7 @@ void TestRaft_leader_snapshot_begin_fails_if_less_than_2_logs_to_compact(CuTest
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -303,7 +303,7 @@ void TestRaft_leader_snapshot_begin_fails_if_less_than_2_logs_to_compact(CuTest
...
@@ -303,7 +303,7 @@ void TestRaft_leader_snapshot_begin_fails_if_less_than_2_logs_to_compact(CuTest
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
/* entry message */
/* entry message */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
raft_recv_entry
(
r
,
ety
,
&
cr
);
raft_recv_entry
(
r
,
ety
,
&
cr
);
...
@@ -322,7 +322,7 @@ void TestRaft_leader_snapshot_end_succeeds_if_log_compacted(CuTest * tc)
...
@@ -322,7 +322,7 @@ void TestRaft_leader_snapshot_end_succeeds_if_log_compacted(CuTest * tc)
raft_server_t
*
r
=
raft_new
();
raft_server_t
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -333,7 +333,7 @@ void TestRaft_leader_snapshot_end_succeeds_if_log_compacted(CuTest * tc)
...
@@ -333,7 +333,7 @@ void TestRaft_leader_snapshot_end_succeeds_if_log_compacted(CuTest * tc)
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
/* entry message */
/* entry message */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
raft_recv_entry
(
r
,
ety
,
&
cr
);
raft_recv_entry
(
r
,
ety
,
&
cr
);
...
@@ -387,7 +387,7 @@ void TestRaft_leader_snapshot_end_succeeds_if_log_compacted2(CuTest * tc)
...
@@ -387,7 +387,7 @@ void TestRaft_leader_snapshot_end_succeeds_if_log_compacted2(CuTest * tc)
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -398,7 +398,7 @@ void TestRaft_leader_snapshot_end_succeeds_if_log_compacted2(CuTest * tc)
...
@@ -398,7 +398,7 @@ void TestRaft_leader_snapshot_end_succeeds_if_log_compacted2(CuTest * tc)
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
/* entry message */
/* entry message */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
raft_recv_entry
(
r
,
ety
,
&
cr
);
raft_recv_entry
(
r
,
ety
,
&
cr
);
...
@@ -428,7 +428,7 @@ void TestRaft_joinee_needs_to_get_snapshot(CuTest * tc)
...
@@ -428,7 +428,7 @@ void TestRaft_joinee_needs_to_get_snapshot(CuTest * tc)
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -438,7 +438,7 @@ void TestRaft_joinee_needs_to_get_snapshot(CuTest * tc)
...
@@ -438,7 +438,7 @@ void TestRaft_joinee_needs_to_get_snapshot(CuTest * tc)
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
/* entry message */
/* entry message */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
raft_recv_entry
(
r
,
ety
,
&
cr
);
raft_recv_entry
(
r
,
ety
,
&
cr
);
...
@@ -469,7 +469,7 @@ void TestRaft_follower_load_from_snapshot(CuTest * tc)
...
@@ -469,7 +469,7 @@ void TestRaft_follower_load_from_snapshot(CuTest * tc)
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
/* entry message */
/* entry message */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_begin_load_snapshot
(
r
,
5
,
5
));
CuAssertIntEquals
(
tc
,
0
,
raft_begin_load_snapshot
(
r
,
5
,
5
));
...
@@ -623,7 +623,7 @@ void TestRaft_leader_sends_snapshot_when_node_next_index_was_compacted(CuTest* t
...
@@ -623,7 +623,7 @@ void TestRaft_leader_sends_snapshot_when_node_next_index_was_compacted(CuTest* t
.
send_appendentries
=
__raft_send_appendentries_capture
,
.
send_appendentries
=
__raft_send_appendentries_capture
,
};
};
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
raft_set_callbacks
(
r
,
&
funcs
,
&
ae
);
raft_set_callbacks
(
r
,
&
funcs
,
&
ae
);
/* node wants an entry just one after the snapshot index */
/* node wants an entry just one after the snapshot index */
...
@@ -644,7 +644,7 @@ void TestRaft_recv_entry_fails_if_snapshot_in_progress(CuTest* tc)
...
@@ -644,7 +644,7 @@ void TestRaft_recv_entry_fails_if_snapshot_in_progress(CuTest* tc)
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -654,7 +654,7 @@ void TestRaft_recv_entry_fails_if_snapshot_in_progress(CuTest* tc)
...
@@ -654,7 +654,7 @@ void TestRaft_recv_entry_fails_if_snapshot_in_progress(CuTest* tc)
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
/* entry message */
/* entry message */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
raft_recv_entry
(
r
,
ety
,
&
cr
);
raft_recv_entry
(
r
,
ety
,
&
cr
);
...
@@ -679,7 +679,7 @@ void TestRaft_recv_entry_succeeds_if_snapshot_nonblocking_apply_is_set(CuTest* t
...
@@ -679,7 +679,7 @@ void TestRaft_recv_entry_succeeds_if_snapshot_nonblocking_apply_is_set(CuTest* t
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -689,7 +689,7 @@ void TestRaft_recv_entry_succeeds_if_snapshot_nonblocking_apply_is_set(CuTest* t
...
@@ -689,7 +689,7 @@ void TestRaft_recv_entry_succeeds_if_snapshot_nonblocking_apply_is_set(CuTest* t
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
/* entry message */
/* entry message */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
/* receive entry */
/* receive entry */
raft_recv_entry
(
r
,
ety
,
&
cr
);
raft_recv_entry
(
r
,
ety
,
&
cr
);
...
@@ -722,10 +722,10 @@ void TestRaft_follower_recv_appendentries_is_successful_when_previous_log_idx_eq
...
@@ -722,10 +722,10 @@ void TestRaft_follower_recv_appendentries_is_successful_when_previous_log_idx_eq
CuAssertIntEquals
(
tc
,
0
,
raft_begin_load_snapshot
(
r
,
2
,
2
));
CuAssertIntEquals
(
tc
,
0
,
raft_begin_load_snapshot
(
r
,
2
,
2
));
CuAssertIntEquals
(
tc
,
0
,
raft_end_load_snapshot
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_end_load_snapshot
(
r
));
msg
_appendentries_t
ae
;
raft
_appendentries_
req_
t
ae
;
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
memset
(
&
ae
,
0
,
sizeof
(
msg
_appendentries_t
));
memset
(
&
ae
,
0
,
sizeof
(
raft
_appendentries_
req_
t
));
ae
.
term
=
3
;
ae
.
term
=
3
;
ae
.
prev_log_idx
=
2
;
ae
.
prev_log_idx
=
2
;
ae
.
prev_log_term
=
2
;
ae
.
prev_log_term
=
2
;
...
@@ -765,7 +765,7 @@ void TestRaft_leader_sends_appendentries_with_correct_prev_log_idx_when_snapshot
...
@@ -765,7 +765,7 @@ void TestRaft_leader_sends_appendentries_with_correct_prev_log_idx_when_snapshot
/* receive appendentries messages */
/* receive appendentries messages */
raft_send_appendentries
(
r
,
p
);
raft_send_appendentries
(
r
,
p
);
msg
_appendentries_t
*
ae
=
sender_poll_msg_data
(
sender
);
raft
_appendentries_
req_
t
*
ae
=
sender_poll_msg_data
(
sender
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
CuAssertTrue
(
tc
,
NULL
!=
ae
);
CuAssertIntEquals
(
tc
,
2
,
ae
->
prev_log_term
);
CuAssertIntEquals
(
tc
,
2
,
ae
->
prev_log_term
);
CuAssertIntEquals
(
tc
,
4
,
ae
->
prev_log_idx
);
CuAssertIntEquals
(
tc
,
4
,
ae
->
prev_log_idx
);
...
@@ -780,7 +780,7 @@ void TestRaft_cancel_snapshot_restores_state(CuTest* tc)
...
@@ -780,7 +780,7 @@ void TestRaft_cancel_snapshot_restores_state(CuTest* tc)
void
*
r
=
raft_new
();
void
*
r
=
raft_new
();
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
raft_set_callbacks
(
r
,
&
funcs
,
NULL
);
msg
_entry_resp
onse
_t
cr
;
raft
_entry_resp_t
cr
;
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
raft_add_node
(
r
,
NULL
,
2
,
0
);
...
@@ -790,7 +790,7 @@ void TestRaft_cancel_snapshot_restores_state(CuTest* tc)
...
@@ -790,7 +790,7 @@ void TestRaft_cancel_snapshot_restores_state(CuTest* tc)
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
CuAssertIntEquals
(
tc
,
0
,
raft_get_log_count
(
r
));
/* single entry */
/* single entry */
msg
_entry_t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft
_entry_
req_
t
*
ety
=
__MAKE_ENTRY
(
1
,
1
,
"entry"
);
raft_recv_entry
(
r
,
ety
,
&
cr
);
raft_recv_entry
(
r
,
ety
,
&
cr
);
ety
=
__MAKE_ENTRY
(
2
,
1
,
"entry"
);
ety
=
__MAKE_ENTRY
(
2
,
1
,
"entry"
);
...
@@ -869,7 +869,7 @@ void TestRaft_leader_sends_snapshot_if_log_was_compacted(CuTest* tc)
...
@@ -869,7 +869,7 @@ void TestRaft_leader_sends_snapshot_if_log_was_compacted(CuTest* tc)
raft_node_set_match_idx
(
node
,
1
);
raft_node_set_match_idx
(
node
,
1
);
raft_node_set_next_idx
(
node
,
2
);
raft_node_set_next_idx
(
node
,
2
);
msg
_appendentries_resp
onse
_t
aer
;
raft
_appendentries_resp_t
aer
;
aer
.
term
=
1
;
aer
.
term
=
1
;
aer
.
success
=
0
;
aer
.
success
=
0
;
aer
.
current_idx
=
1
;
aer
.
current_idx
=
1
;
...
@@ -895,7 +895,7 @@ void TestRaft_clear_snapshot_on_leader_change(CuTest * tc)
...
@@ -895,7 +895,7 @@ void TestRaft_clear_snapshot_on_leader_change(CuTest * tc)
raft_set_callbacks
(
r
,
&
funcs
,
&
data
);
raft_set_callbacks
(
r
,
&
funcs
,
&
data
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
msg
_snapshot_t
msg
=
{
raft
_snapshot_
req_
t
msg
=
{
.
leader_id
=
2
,
.
leader_id
=
2
,
.
snapshot_index
=
1
,
.
snapshot_index
=
1
,
.
snapshot_term
=
1
,
.
snapshot_term
=
1
,
...
@@ -905,7 +905,7 @@ void TestRaft_clear_snapshot_on_leader_change(CuTest * tc)
...
@@ -905,7 +905,7 @@ void TestRaft_clear_snapshot_on_leader_change(CuTest * tc)
.
chunk
.
last_chunk
=
0
,
.
chunk
.
last_chunk
=
0
,
};
};
msg
_snapshot_resp
onse
_t
resp
=
{
0
};
raft
_snapshot_resp_t
resp
=
{
0
};
raft_recv_snapshot
(
r
,
NULL
,
&
msg
,
&
resp
);
raft_recv_snapshot
(
r
,
NULL
,
&
msg
,
&
resp
);
CuAssertIntEquals
(
tc
,
1
,
data
.
store_chunk
);
CuAssertIntEquals
(
tc
,
1
,
data
.
store_chunk
);
...
@@ -935,7 +935,7 @@ void TestRaft_reject_wrong_offset(CuTest * tc)
...
@@ -935,7 +935,7 @@ void TestRaft_reject_wrong_offset(CuTest * tc)
raft_set_callbacks
(
r
,
&
funcs
,
&
data
);
raft_set_callbacks
(
r
,
&
funcs
,
&
data
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
msg
_snapshot_t
msg
=
{
raft
_snapshot_
req_
t
msg
=
{
.
leader_id
=
2
,
.
leader_id
=
2
,
.
snapshot_index
=
1
,
.
snapshot_index
=
1
,
.
snapshot_term
=
1
,
.
snapshot_term
=
1
,
...
@@ -946,7 +946,7 @@ void TestRaft_reject_wrong_offset(CuTest * tc)
...
@@ -946,7 +946,7 @@ void TestRaft_reject_wrong_offset(CuTest * tc)
.
chunk
.
last_chunk
=
0
,
.
chunk
.
last_chunk
=
0
,
};
};
msg
_snapshot_resp
onse
_t
resp
=
{
0
};
raft
_snapshot_resp_t
resp
=
{
0
};
raft_recv_snapshot
(
r
,
NULL
,
&
msg
,
&
resp
);
raft_recv_snapshot
(
r
,
NULL
,
&
msg
,
&
resp
);
CuAssertIntEquals
(
tc
,
1
,
data
.
store_chunk
);
CuAssertIntEquals
(
tc
,
1
,
data
.
store_chunk
);
...
@@ -975,7 +975,7 @@ void TestRaft_set_last_chunk_on_duplicate(CuTest * tc)
...
@@ -975,7 +975,7 @@ void TestRaft_set_last_chunk_on_duplicate(CuTest * tc)
raft_set_callbacks
(
r
,
&
funcs
,
&
data
);
raft_set_callbacks
(
r
,
&
funcs
,
&
data
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
raft_add_node
(
r
,
NULL
,
1
,
1
);
msg
_snapshot_t
msg
=
{
raft
_snapshot_
req_
t
msg
=
{
.
term
=
1
,
.
term
=
1
,
.
leader_id
=
2
,
.
leader_id
=
2
,
.
snapshot_index
=
5
,
.
snapshot_index
=
5
,
...
@@ -987,13 +987,13 @@ void TestRaft_set_last_chunk_on_duplicate(CuTest * tc)
...
@@ -987,13 +987,13 @@ void TestRaft_set_last_chunk_on_duplicate(CuTest * tc)
.
chunk
.
last_chunk
=
1
,
.
chunk
.
last_chunk
=
1
,
};
};
msg
_snapshot_resp
onse
_t
resp
=
{
0
};
raft
_snapshot_resp_t
resp
=
{
0
};
raft_recv_snapshot
(
r
,
NULL
,
&
msg
,
&
resp
);
raft_recv_snapshot
(
r
,
NULL
,
&
msg
,
&
resp
);
CuAssertIntEquals
(
tc
,
1
,
data
.
store_chunk
);
CuAssertIntEquals
(
tc
,
1
,
data
.
store_chunk
);
CuAssertIntEquals
(
tc
,
1
,
data
.
load
);
CuAssertIntEquals
(
tc
,
1
,
data
.
load
);
msg
_snapshot_t
msg2
=
{
raft
_snapshot_
req_
t
msg2
=
{
.
term
=
1
,
.
term
=
1
,
.
leader_id
=
2
,
.
leader_id
=
2
,
.
snapshot_index
=
4
,
.
snapshot_index
=
4
,
...
...
tests/virtraft2.py
View file @
8ee3f264
...
@@ -530,7 +530,7 @@ class Network(object):
...
@@ -530,7 +530,7 @@ class Network(object):
new_msg
=
ffi
.
cast
(
ffi
.
typeof
(
msg
),
lib
.
malloc
(
msg_size
))
new_msg
=
ffi
.
cast
(
ffi
.
typeof
(
msg
),
lib
.
malloc
(
msg_size
))
ffi
.
memmove
(
new_msg
,
msg
,
msg_size
)
ffi
.
memmove
(
new_msg
,
msg
,
msg_size
)
if
msg_type
==
'
msg
_appendentries_t *'
:
if
msg_type
==
'
raft
_appendentries_
req_
t *'
:
new_msg
.
entries
=
lib
.
raft_entry_array_deepcopy
(
msg
.
entries
,
msg
.
n_entries
)
new_msg
.
entries
=
lib
.
raft_entry_array_deepcopy
(
msg
.
entries
,
msg
.
n_entries
)
self
.
messages
.
append
(
Message
(
new_msg
,
sendor
,
sendee
))
self
.
messages
.
append
(
Message
(
new_msg
,
sendor
,
sendee
))
...
@@ -540,9 +540,9 @@ class Network(object):
...
@@ -540,9 +540,9 @@ class Network(object):
logger
.
debug
(
f
"poll_message:
{
msg
.
sendor
.
id
}
->
{
msg
.
sendee
.
id
}
(
{
msg_type
}
"
)
logger
.
debug
(
f
"poll_message:
{
msg
.
sendor
.
id
}
->
{
msg
.
sendee
.
id
}
(
{
msg_type
}
"
)
if
msg_type
==
'
msg
_appendentries_t *'
:
if
msg_type
==
'
raft
_appendentries_
req_
t *'
:
node
=
lib
.
raft_get_node
(
msg
.
sendee
.
raft
,
msg
.
sendor
.
id
)
node
=
lib
.
raft_get_node
(
msg
.
sendee
.
raft
,
msg
.
sendor
.
id
)
response
=
ffi
.
new
(
'
msg
_appendentries_resp
onse
_t*'
)
response
=
ffi
.
new
(
'
raft
_appendentries_resp_t*'
)
e
=
lib
.
raft_recv_appendentries
(
msg
.
sendee
.
raft
,
node
,
msg
.
data
,
response
)
e
=
lib
.
raft_recv_appendentries
(
msg
.
sendee
.
raft
,
node
,
msg
.
data
,
response
)
if
lib
.
RAFT_ERR_SHUTDOWN
==
e
:
if
lib
.
RAFT_ERR_SHUTDOWN
==
e
:
logger
.
error
(
'Catastrophic'
)
logger
.
error
(
'Catastrophic'
)
...
@@ -553,27 +553,27 @@ class Network(object):
...
@@ -553,27 +553,27 @@ class Network(object):
else
:
else
:
self
.
enqueue_msg
(
response
,
msg
.
sendee
,
msg
.
sendor
)
self
.
enqueue_msg
(
response
,
msg
.
sendee
,
msg
.
sendor
)
elif
msg_type
==
'
msg
_appendentries_resp
onse
_t *'
:
elif
msg_type
==
'
raft
_appendentries_resp_t *'
:
node
=
lib
.
raft_get_node
(
msg
.
sendee
.
raft
,
msg
.
sendor
.
id
)
node
=
lib
.
raft_get_node
(
msg
.
sendee
.
raft
,
msg
.
sendor
.
id
)
lib
.
raft_recv_appendentries_response
(
msg
.
sendee
.
raft
,
node
,
msg
.
data
)
lib
.
raft_recv_appendentries_response
(
msg
.
sendee
.
raft
,
node
,
msg
.
data
)
elif
msg_type
==
'
msg
_snapshot_t *'
:
elif
msg_type
==
'
raft
_snapshot_
req_
t *'
:
response
=
ffi
.
new
(
'
msg
_snapshot_resp
onse
_t *'
)
response
=
ffi
.
new
(
'
raft
_snapshot_resp_t *'
)
node
=
lib
.
raft_get_node
(
msg
.
sendee
.
raft
,
msg
.
sendor
.
id
)
node
=
lib
.
raft_get_node
(
msg
.
sendee
.
raft
,
msg
.
sendor
.
id
)
lib
.
raft_recv_snapshot
(
msg
.
sendee
.
raft
,
node
,
msg
.
data
,
response
)
lib
.
raft_recv_snapshot
(
msg
.
sendee
.
raft
,
node
,
msg
.
data
,
response
)
self
.
enqueue_msg
(
response
,
msg
.
sendee
,
msg
.
sendor
)
self
.
enqueue_msg
(
response
,
msg
.
sendee
,
msg
.
sendor
)
elif
msg_type
==
'
msg
_snapshot_resp
onse
_t *'
:
elif
msg_type
==
'
raft
_snapshot_resp_t *'
:
node
=
lib
.
raft_get_node
(
msg
.
sendee
.
raft
,
msg
.
sendor
.
id
)
node
=
lib
.
raft_get_node
(
msg
.
sendee
.
raft
,
msg
.
sendor
.
id
)
lib
.
raft_recv_snapshot_response
(
msg
.
sendee
.
raft
,
node
,
msg
.
data
)
lib
.
raft_recv_snapshot_response
(
msg
.
sendee
.
raft
,
node
,
msg
.
data
)
elif
msg_type
==
'
msg
_requestvote_t *'
:
elif
msg_type
==
'
raft
_requestvote_
req_
t *'
:
response
=
ffi
.
new
(
'
msg
_requestvote_resp
onse
_t*'
)
response
=
ffi
.
new
(
'
raft
_requestvote_resp_t*'
)
node
=
lib
.
raft_get_node
(
msg
.
sendee
.
raft
,
msg
.
sendor
.
id
)
node
=
lib
.
raft_get_node
(
msg
.
sendee
.
raft
,
msg
.
sendor
.
id
)
lib
.
raft_recv_requestvote
(
msg
.
sendee
.
raft
,
node
,
msg
.
data
,
response
)
lib
.
raft_recv_requestvote
(
msg
.
sendee
.
raft
,
node
,
msg
.
data
,
response
)
self
.
enqueue_msg
(
response
,
msg
.
sendee
,
msg
.
sendor
)
self
.
enqueue_msg
(
response
,
msg
.
sendee
,
msg
.
sendor
)
elif
msg_type
==
'
msg
_requestvote_resp
onse
_t *'
:
elif
msg_type
==
'
raft
_requestvote_resp_t *'
:
node
=
lib
.
raft_get_node
(
msg
.
sendee
.
raft
,
msg
.
sendor
.
id
)
node
=
lib
.
raft_get_node
(
msg
.
sendee
.
raft
,
msg
.
sendor
.
id
)
e
=
lib
.
raft_recv_requestvote_response
(
msg
.
sendee
.
raft
,
node
,
msg
.
data
)
e
=
lib
.
raft_recv_requestvote_response
(
msg
.
sendee
.
raft
,
node
,
msg
.
data
)
if
lib
.
RAFT_ERR_SHUTDOWN
==
e
:
if
lib
.
RAFT_ERR_SHUTDOWN
==
e
:
...
@@ -941,9 +941,9 @@ class RaftServer(object):
...
@@ -941,9 +941,9 @@ class RaftServer(object):
self
.
network
=
network
self
.
network
=
network
def
load_callbacks
(
self
):
def
load_callbacks
(
self
):
self
.
raft_send_requestvote
=
ffi
.
callback
(
"int(raft_server_t*, void*, raft_node_t*,
msg
_requestvote_t*)"
,
raft_send_requestvote
)
self
.
raft_send_requestvote
=
ffi
.
callback
(
"int(raft_server_t*, void*, raft_node_t*,
raft
_requestvote_
req_
t*)"
,
raft_send_requestvote
)
self
.
raft_send_appendentries
=
ffi
.
callback
(
"int(raft_server_t*, void*, raft_node_t*,
msg
_appendentries_t*)"
,
raft_send_appendentries
)
self
.
raft_send_appendentries
=
ffi
.
callback
(
"int(raft_server_t*, void*, raft_node_t*,
raft
_appendentries_
req_
t*)"
,
raft_send_appendentries
)
self
.
raft_send_snapshot
=
ffi
.
callback
(
"int(raft_server_t*, void* , raft_node_t*,
msg
_snapshot_t*)"
,
raft_send_snapshot
)
self
.
raft_send_snapshot
=
ffi
.
callback
(
"int(raft_server_t*, void* , raft_node_t*,
raft
_snapshot_
req_
t*)"
,
raft_send_snapshot
)
self
.
raft_load_snapshot
=
ffi
.
callback
(
"int(raft_server_t*, void*, raft_index_t, raft_term_t)"
,
raft_load_snapshot
)
self
.
raft_load_snapshot
=
ffi
.
callback
(
"int(raft_server_t*, void*, raft_index_t, raft_term_t)"
,
raft_load_snapshot
)
self
.
raft_clear_snapshot
=
ffi
.
callback
(
"int(raft_server_t*, void*)"
,
raft_clear_snapshot
)
self
.
raft_clear_snapshot
=
ffi
.
callback
(
"int(raft_server_t*, void*)"
,
raft_clear_snapshot
)
self
.
raft_get_snapshot_chunk
=
ffi
.
callback
(
"int(raft_server_t*, void*, raft_node_t*, raft_size_t offset, raft_snapshot_chunk_t*)"
,
raft_get_snapshot_chunk
)
self
.
raft_get_snapshot_chunk
=
ffi
.
callback
(
"int(raft_server_t*, void*, raft_node_t*, raft_size_t offset, raft_snapshot_chunk_t*)"
,
raft_get_snapshot_chunk
)
...
@@ -962,7 +962,7 @@ class RaftServer(object):
...
@@ -962,7 +962,7 @@ class RaftServer(object):
def
recv_entry
(
self
,
ety
):
def
recv_entry
(
self
,
ety
):
# FIXME: leak
# FIXME: leak
response
=
ffi
.
new
(
'
msg
_entry_resp
onse
_t*'
)
response
=
ffi
.
new
(
'
raft
_entry_resp_t*'
)
return
lib
.
raft_recv_entry
(
self
.
raft
,
ety
,
response
)
return
lib
.
raft_recv_entry
(
self
.
raft
,
ety
,
response
)
def
get_entry
(
self
,
idx
):
def
get_entry
(
self
,
idx
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment