photoncloud-monorepo/flaredb/specs/004-multi-raft/contracts/pd.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.2 KiB

Contracts: PD / Placement RPCs (Multi-Raft)

Source of truth: rdb-proto/src/pdpb.proto

Services

  • Pd
    • RegisterStore(RegisterStoreRequest) -> RegisterStoreResponse
    • GetRegion(GetRegionRequest) -> GetRegionResponse
    • ListRegions(ListRegionsRequest) -> ListRegionsResponse
    • MoveRegion(MoveRegionRequest) -> MoveRegionResponse

Messages (selected)

  • Region:

    • id: u64
    • start_key: bytes
    • end_key: bytes (empty = infinity)
    • peers: repeated u64 (store IDs)
    • leader_id: u64
  • Store:

    • id: u64
    • addr: string
  • MoveRegionRequest:

    • region_id: u64
    • from_store: u64
    • to_store: u64

Behaviors / Expectations

  • ListRegions is used at bootstrap and periodic refresh to populate routing.
  • MoveRegion directs a leader to add a replica on to_store (ConfChange Add) and, after catch-up, remove from_store (ConfChange Remove). Current implementation keeps source online; removal can be triggered separately.
  • Region key ranges returned by PD must be non-overlapping; nodes validate and fail startup on overlap.
  • Heartbeat: nodes periodically refresh routing via ListRegions (30s). A dedicated heartbeat RPC can replace this in a future phase.