mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-07 00:27:03 +00:00
All 5 feedback items accepted; no subsetting. F1 — RebuildBitmap split into standalone §2.10 entity (10 total, was 9). Rationale: bitmap has independent on-disk schema (~84 LOC rebuild_bitmap.go) + independent conflict-resolution invariant (WAL-wins-over-base). Collapsing into §2.6 RebuildSession at L1 would lose granularity for L2 — bitmap and session may have different PRESERVE/REBUILD verdicts. §2.6 now explicitly cross-references §2.10. F2 — ShipperGroup §2.2 gains "External deps" row: N = RF comes from master assignment via BlockVol.SetReplicaAddrs, not from shipper-internal decision. Cross-entity contract (master assignment ↔ ShipperGroup size ↔ ReplicaReceiver expected-connection-count ↔ DistGroupCommit quorum arithmetic) made explicit so L2 split can't silently drift sync_quorum. F3 — ReplicaBarrier §2.4 scope rewritten from "per-request ephemeral" to "per-request call-closure, BUT queue-state shared per-volume via cond.Wait". Prior wording risked 1:1-porting into a V3 stateless function, losing multi-watcher cond.Broadcast semantics. H5 added to §3 observations — cross-node epoch consistency observation window for sync_quorum. V2 implicit via ack frame carrying epoch; V3 L2 must pick "ack frame carries epoch" vs "primary maintains per-replica epoch cache" before locking. Different choices → different failover + rebuild-trigger semantics. H6 added to §3 observations — write-path vs replication-path concurrency residence. Three L2 options documented: A) StorageBackend.Write triggers shipper (violates T3a layering) B) ReplicatedBackend wraps StorageBackend+shipper (clean; +1 entity) C) Replication inside DurableProvider (extends BUG-005 lesson) L1 makes no recommendation; L2 LOCKS the decision before L3. §5 restructured into 5 gated steps; step 1 is a mandatory sw V3 pre-scan of core/frontend/durable/ + core/frontend/*.go for pre-baked replication-adjacent assumptions. Rationale cited per architect: BUG-005 latent drift came from implicit V3 convention; L1 must surface any such convention before L2 verdicts lock. Concrete grep checklist included so the scan is 5 min, not open-ended. §2 header + §4 open question #1 updated for 10-entity count. Scope block references rebuild_bitmap.go explicitly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
sw-block
Private WAL V2 and standalone block-service workspace.
Purpose:
- keep WAL V2 design/prototype work isolated from WAL V1 production code in
weed/storage/blockvol - allow private design notes and experiments to evolve without polluting V1 delivery paths
- keep the future standalone
sw-blockproduct structure clean enough to split into a separate repo later if needed
Suggested layout:
design/: shared V2 design docsprototype/: code prototypes and experiments.private/: private notes, phase development, roadmap, and non-public working material
Repository direction:
- current state:
sw-block/is an isolated workspace insideseaweedfs - likely future state:
sw-blockbecomes a standalone sibling repo/product - design and prototype structure should therefore stay product-oriented and not depend on SeaweedFS-specific paths