photoncloud-monorepo/chainfire/proto/internal.proto
2026-05-05 22:49:03 +09:00

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;
}