- Remove gitlinks (160000 mode) for chainfire, flaredb, iam - Add workspace contents as regular tracked files - Update flake.nix to use simple paths instead of builtins.fetchGit This resolves the nix build failure where submodule directories appeared empty in the nix store. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
35 lines
953 B
Markdown
35 lines
953 B
Markdown
# Raft Service Contract (gRPC)
|
|
|
|
## Overview
|
|
|
|
Single RPC entrypoint for Raft message exchange; uses raft-rs `Message` protobuf encoding (prost).
|
|
|
|
## Service
|
|
|
|
```
|
|
service RaftService {
|
|
rpc Send(RaftMessage) returns (RaftResponse);
|
|
}
|
|
```
|
|
|
|
## Messages
|
|
|
|
- **RaftMessage**
|
|
- `message: bytes` (serialized `raft::eraftpb::Message` via prost)
|
|
|
|
- **RaftResponse**
|
|
- Empty payload; errors conveyed via gRPC status
|
|
|
|
## Expectations
|
|
|
|
- Client (peer) wraps raft-rs `Message` and posts to remote peer via `Send`.
|
|
- Receivers decode and feed into `RawNode::step`, then drive `on_ready` to persist/apply.
|
|
- Transport must retry/transient-handle UNAVAILABLE; fail fast on INVALID_ARGUMENT decode errors.
|
|
|
|
## Test Hooks
|
|
|
|
- Integration harness should:
|
|
- Start 3 peers with distinct addresses.
|
|
- Wire RaftService between peers.
|
|
- Propose on leader; verify followers receive and persist entries.
|
|
- Simulate follower stop/restart and verify catch-up via `Send`.
|