Copies of design docs removed in Phase 09, preserved in sw-block/docs/archive/ for historical reference. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6.3 KiB
Phase 08 Engine Skeleton Map
Date: 2026-03-31
Status: historical phase map
Purpose: provide a short structural map for the Phase 08 hardening path so implementation can move faster without reopening accepted V2 boundaries
Scope
This is not the final standalone sw-block architecture.
It is the shortest useful engine skeleton for the accepted Phase 08 hardening path:
RF=2sync_all- existing
Seaweedmaster / volume-server heartbeat path - V2 engine owns recovery policy
blockvolremains the execution backend
Module Map
1. Control plane
Role:
- authoritative control truth
Primary sources:
weed/server/master_grpc_server.goweed/server/master_block_registry.goweed/server/master_block_failover.goweed/server/volume_grpc_client_to_master.go
What it produces:
- confirmed assignment
Epoch- target
Role - failover / promotion / reassignment result
- stable server identity
2. Control bridge
Role:
- translate real control truth into V2 engine intent
Primary files:
weed/storage/blockvol/v2bridge/control.gosw-block/bridge/blockvol/control_adapter.go- entry path in
weed/server/volume_server_block.go
What it produces:
AssignmentIntent- stable
ReplicaID EndpointSessionKind
3. Engine runtime
Role:
- recovery-policy core
Primary files:
sw-block/engine/replication/orchestrator.gosw-block/engine/replication/driver.gosw-block/engine/replication/executor.gosw-block/engine/replication/sender.gosw-block/engine/replication/history.go
What it decides:
- zero-gap / catch-up / needs-rebuild
- sender/session ownership
- stale authority rejection
- resource acquisition / release
- rebuild source selection
4. Storage bridge
Role:
- translate real blockvol storage truth and execution capability into engine-facing adapters
Primary files:
weed/storage/blockvol/v2bridge/reader.goweed/storage/blockvol/v2bridge/pinner.goweed/storage/blockvol/v2bridge/executor.gosw-block/bridge/blockvol/storage_adapter.go
What it provides:
RetainedHistory- WAL retention pin / release
- snapshot pin / release
- full-base pin / release
- WAL scan execution
5. Block runtime
Role:
- execute real I/O
Primary files:
weed/storage/blockvol/blockvol.goweed/storage/blockvol/replica_apply.goweed/storage/blockvol/replica_barrier.goweed/storage/blockvol/recovery.goweed/storage/blockvol/rebuild.goweed/storage/blockvol/wal_shipper.go
What it owns:
- WAL
- extent
- flusher
- checkpoint / superblock
- receiver / shipper
- rebuild server
Execution Order
Control path
master heartbeat / failover truth
-> BlockVolumeAssignment
-> volume server ProcessAssignments
-> v2bridge control conversion
-> engine ProcessAssignment
-> sender/session state updated
Catch-up path
assignment accepted
-> engine reads retained history
-> engine plans catch-up
-> storage bridge pins WAL retention
-> engine executor drives v2bridge executor
-> blockvol scans WAL / ships entries
-> engine completes session
Rebuild path
assignment accepted
-> engine detects NeedsRebuild
-> engine selects rebuild source
-> storage bridge pins snapshot/full-base/tail
-> executor drives transfer path
-> blockvol performs restore / replay work
-> engine completes rebuild
Local durability path
WriteLBA / Trim
-> WAL append
-> shipping / barrier
-> client-visible durability decision
-> flusher writes extent
-> checkpoint advances
-> retention floor decides WAL reclaimability
Interim Fields
These are currently acceptable only as explicit hardening carry-forwards:
localServerID
Current source:
BlockService.listenAddr
Meaning:
- temporary local identity source for replica/rebuild-side assignment translation
Status:
- interim only
- should become registry-assigned stable server identity later
CommittedLSN = CheckpointLSN
Current source:
v2bridge.Reader/BlockVol.StatusSnapshot()
Meaning:
- current V1-style interim mapping where committed truth collapses to local checkpoint truth
Status:
- not final V2 truth
- must become a gate decision before a production-candidate phase
heartbeat as control carrier
Current source:
- existing master <-> volume-server heartbeat path
Meaning:
- current transport for assignment/control delivery
Status:
- acceptable as current carrier
- not yet a final proof that no separate control channel will ever be needed
Hard Gates
These should remain explicit in Phase 08:
Gate 1: committed truth
Before production-candidate:
- either separate
CommittedLSNfromCheckpointLSN - or explicitly bound the first candidate path to currently proven pre-checkpoint replay behavior
Gate 2: live control delivery
Required:
- real assignment delivery must reach the engine on the live path
- not only converter-level proof
Gate 3: integrated catch-up closure
Required:
- engine -> executor ->
v2bridge-> blockvol must be proven as one live chain - not planner proof plus direct WAL-scan proof as separate evidence
Gate 4: first rebuild execution path
Required:
- rebuild must not remain only a detection outcome
- the chosen product path needs one real executable rebuild closure
Gate 5: unified replay
Required:
- after control and execution closure land, rerun the accepted failure-class set on the unified live path
Reuse Map
Reuse directly
weed/server/master_grpc_server.goweed/server/volume_grpc_client_to_master.goweed/server/volume_server_block.goweed/server/master_block_registry.goweed/server/master_block_failover.goweed/storage/blockvol/blockvol.goweed/storage/blockvol/replica_apply.goweed/storage/blockvol/replica_barrier.goweed/storage/blockvol/v2bridge/
Reuse as implementation reality, not truth
shipperGroupRetentionFloorFnReplicaReceiver- checkpoint/superblock machinery
- existing failover heuristics
Do not inherit as V2 semantics
- address-shaped identity
- old degraded/catch-up intuition from V1/V1.5
CommittedLSN = CheckpointLSNas final truth- blockvol-side recovery policy decisions
Short Rule
Use this skeleton as:
- a hardening map for the current product path
Do not mistake it for:
- the final standalone
sw-blockarchitecture