photoncloud-monorepo/flaredb/specs/002-raft-features/data-model.md
centra 8f94aee1fa Fix R8: Convert submodule gitlinks to regular directories
- 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>
2025-12-09 16:51:20 +09:00

34 lines
1.7 KiB
Markdown

# Data Model: Raft Core Replication
## Entities
- **Peer**
- Fields: `id (u64)`, `region_id (u64)`, `state (Leader/Follower/Candidate)`, `term (u64)`, `commit_index (u64)`, `last_applied (u64)`
- Relationships: owns `RaftStorage`; exchanges `RaftLogEntry` with other peers.
- Constraints: single region scope for this phase; fixed voter set of 3.
- **RaftLogEntry**
- Fields: `index (u64)`, `term (u64)`, `command (bytes)`, `context (bytes, optional)`
- Relationships: persisted in `raft_log` CF; applied to state machine when committed.
- Constraints: indices strictly increasing; term monotonic per election; applied in order.
- **HardState**
- Fields: `current_term (u64)`, `voted_for (u64)`, `commit_index (u64)`
- Relationships: persisted in `raft_state` CF; loaded at startup before participating.
- Constraints: must be flushed atomically with log appends when advancing commit index.
- **ConfState**
- Fields: `voters (Vec<u64>)`
- Relationships: persisted in `raft_state` CF; defines quorum (majority of 3).
- Constraints: static for this phase; changes require future joint consensus.
- **ReplicationState**
- Fields: `match_index (u64)`, `next_index (u64)`, `pending (bool)`
- Relationships: maintained per follower in memory; not persisted.
- Constraints: drives AppendEntries backoff and progress.
## State Transitions
- Peer transitions: Follower → Candidate → Leader on election; Leader → Follower on higher term or failed election.
- Log application: when `commit_index` advances, apply entries in order to state machine; `last_applied` increases monotonically.
- Recovery: on restart, load `HardState`, `ConfState`, and log; reconcile with leader via AppendEntries (truncate/append) before applying new entries.