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

1.7 KiB

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.