syntax = "proto3";
package d_engine.server.replication;
import "proto/common.proto";
option go_package = "github.com/deventlab/d-engine/proto/server/replication";
message AppendEntriesRequest {
uint64 term = 1;
uint32 leader_id = 2;
uint64 prev_log_index = 3;
uint64 prev_log_term = 4;
repeated d_engine.common.Entry entries = 5;
uint64 leader_commit_index = 6;
}
message AppendEntriesResponse {
uint32 node_id = 1;
uint64 term = 2;
oneof result {
SuccessResult success = 3;
ConflictResult conflict = 4;
uint64 higher_term = 5;
}
}
message SuccessResult {
d_engine.common.LogId last_match = 1;
}
message ConflictResult {
optional uint64 conflict_term = 1;
optional uint64 conflict_index = 2;
}
service RaftReplicationService {
rpc AppendEntries(AppendEntriesRequest) returns (AppendEntriesResponse);
// Persistent bidirectional stream per peer; eliminates per-batch h2 stream open/close overhead.
rpc StreamAppendEntries(stream AppendEntriesRequest) returns (stream AppendEntriesResponse);
}