88 lines
2.6 KiB
Protocol Buffer
88 lines
2.6 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package chainfire.internal;
|
|
|
|
// Internal Raft RPC service for node-to-node communication
|
|
service RaftService {
|
|
// Vote requests a vote from a peer
|
|
rpc Vote(VoteRequest) returns (VoteResponse);
|
|
|
|
// AppendEntries sends log entries to followers
|
|
rpc AppendEntries(AppendEntriesRequest) returns (AppendEntriesResponse);
|
|
|
|
// TimeoutNow requests an immediate election on the target voting peer.
|
|
rpc TimeoutNow(TimeoutNowRequest) returns (TimeoutNowResponse);
|
|
}
|
|
|
|
message VoteRequest {
|
|
// term is the candidate's term
|
|
uint64 term = 1;
|
|
// candidate_id is the candidate requesting the vote
|
|
uint64 candidate_id = 2;
|
|
// last_log_index is index of candidate's last log entry
|
|
uint64 last_log_index = 3;
|
|
// last_log_term is term of candidate's last log entry
|
|
uint64 last_log_term = 4;
|
|
}
|
|
|
|
message VoteResponse {
|
|
// term is the current term for the voter
|
|
uint64 term = 1;
|
|
// vote_granted is true if the candidate received the vote
|
|
bool vote_granted = 2;
|
|
// last_log_id is the voter's last log ID
|
|
uint64 last_log_index = 3;
|
|
uint64 last_log_term = 4;
|
|
}
|
|
|
|
message AppendEntriesRequest {
|
|
// term is the leader's term
|
|
uint64 term = 1;
|
|
// leader_id is the leader's ID
|
|
uint64 leader_id = 2;
|
|
// prev_log_index is index of log entry immediately preceding new ones
|
|
uint64 prev_log_index = 3;
|
|
// prev_log_term is term of prev_log_index entry
|
|
uint64 prev_log_term = 4;
|
|
// entries are log entries to append
|
|
repeated LogEntry entries = 5;
|
|
// leader_commit is leader's commit index
|
|
uint64 leader_commit = 6;
|
|
}
|
|
|
|
enum EntryType {
|
|
ENTRY_TYPE_BLANK = 0;
|
|
ENTRY_TYPE_NORMAL = 1;
|
|
ENTRY_TYPE_MEMBERSHIP = 2;
|
|
}
|
|
|
|
message LogEntry {
|
|
// index is the log entry index
|
|
uint64 index = 1;
|
|
// term is the term when entry was received
|
|
uint64 term = 2;
|
|
// data is the command data
|
|
bytes data = 3;
|
|
// entry_type identifies how data should be decoded
|
|
EntryType entry_type = 4;
|
|
}
|
|
|
|
message AppendEntriesResponse {
|
|
// term is the current term
|
|
uint64 term = 1;
|
|
// success is true if follower contained entry matching prevLogIndex
|
|
bool success = 2;
|
|
// conflict_index is the first conflicting index (for optimization)
|
|
uint64 conflict_index = 3;
|
|
// conflict_term is the term of the conflicting entry
|
|
uint64 conflict_term = 4;
|
|
}
|
|
|
|
message TimeoutNowRequest {}
|
|
|
|
message TimeoutNowResponse {
|
|
// accepted is true if the target accepted the immediate-election request.
|
|
bool accepted = 1;
|
|
// term is the target node's current term after processing the request.
|
|
uint64 term = 2;
|
|
}
|