 pingqiuandClaude Opus 4.6
|
59a36013d4
|
feat: rebuild hardening A1-A5 + session-controlled execution path
A1 Engine kind-routing fix:
SessionProgressObserved/Completed/Failed now respect active session
Kind. Rebuild progress no longer leaks into catch-up aggregate.
sessionKindMismatch guard + observeRebuildProgress helper.
2 regression tests lock kind isolation.
A2 Retention pin:
Rebuild session ack drives progress-based WAL retention floor.
Pin installed at base_lsn on accepted, advances with wal_applied_lsn,
released on completed/failed/cancelled. rebuildProgressPinFloor
returns min across all active replicas.
Retention pin test: 100 blocks fill WAL, 5 flusher cycles with
20 pinned rebuild entries — all verified correct.
A3 Progress ack emission:
Automatic sessionAck(running/base_complete/completed/failed) emitted
from rebuild session lifecycle transitions. sessionAckLocked builds
ack under session lock. emitRebuildSessionAck callback wired through
SetOnRebuildSessionAck on BlockVol.
ObserveReplicaRebuildSessionAck maps acks to core engine events.
WireLocalReplicaRebuildSessionAcks bridges local callback to server.
5 server tests proving ack→core, pin advance, pin cleanup.
A4 Deadline/timeout:
rebuildAckWatch watchdog: armed on accepted/running/base_complete,
refreshed on each ack, cleared on completed/failed. Timeout
cancels local session + clears pin + fail-closes.
2 tests: timeout→fail-close, progress→refresh.
A5 Session-controlled execution path:
v2bridge.Executor.TransferFullBase now uses session-controlled loop:
beginControlledFullBase → real sessionControl over TCP →
transferExtentToSession via RebuildTransportClient →
PrepareFullBaseRebuild → TryCompleteRebuildSession.
ReplicaReceiver control channel handles MsgSessionControl alongside
MsgBarrierReq. Session acks written back on same TCP connection.
RebuildSessionBase request type separates new per-block stream from
legacy raw extent stream. Full-base cleanup deferred until success.
Deadlock fix: ApplyBaseBlock releases session lock before ioMu.
Hydration skip for full-base sessions.
23 rebuild component tests (all pass):
11 kernel correctness, 8 transport/runtime, 3 scenario-scale,
including 1GB primary-initiated with CRC validation.
29 files changed, ~2500 insertions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-08 14:39:11 -07:00 |
|
 pingqiuandClaude Opus 4.6
|
d2d57851b0
|
feat: rebuild MVP — dual-lane session with bitmap protection
Rebuild session protocol implementation for v2-rebuild-mvp-session-protocol.md.
New files:
- rebuild_bitmap.go: RebuildBitmap — session-scoped dense bitset for
WAL-applied LBA tracking. MarkApplied on local WAL write (not receive).
ShouldApplyBase returns false for WAL-covered LBAs (WAL always wins).
- rebuild_session.go: RebuildSession — replica-side two-line rebuild.
WAL lane (ApplyWALEntry) + base lane (ApplyBaseBlock) with bitmap
conflict resolution. TryComplete requires BOTH base_complete AND
wal_applied_lsn >= target_lsn. Volume-level control surface:
StartRebuildSession, ApplyRebuildSessionWALEntry/BaseBlock,
MarkRebuildSessionBaseComplete, TryCompleteRebuildSession,
CancelRebuildSession, ActiveRebuildSession.
- rebuild_mvp_test.go: 4 correctness tests — base+WAL converge,
WAL-applied never overwritten by base, bitmap set on applied not
received, control surface start/supersede/complete.
- rebuild_transport_test.go: 2 transport-level tests — two-line with
real WAL shipping, live writes during base copy with bitmap conflict.
Design docs:
- v2-rebuild-mvp-session-protocol.md: MVP spec with message set, apply
rules, completion/failure/crash rules, test matrix
- v2-sync-recovery-protocol.md: full protocol context (keepup/catchup/
rebuild unified design, primary decision logic, two-line model)
- v2-session-protocol-shape.md: protocol shape overview
Protocol engine (reference, not production):
- sw-block/protocol/: 7-event engine with ~300 lines, 13 tests
6 rebuild tests pass, all existing component tests pass.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-07 14:30:34 -07:00 |
|