historization: crash failover leaves a ~30 s capture gap (Primary unreachable but not downed) #672
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found by the QuestDB historian live gate (
docs/plans/2026-10-10-questdb-historian-live-gate.md, §Gate findings). The gap is backend-independent.Observed: I ran
docker kill(SIGKILL) on the recording Primary (central-2) at 07:45:58. After that:Cause: #537 gates capture to the recording Primary. A crashed Primary stays unreachable but not downed for the Akka failure-detector window plus
auto-down-unreachable-after = 15s. During that window the standby is not promoted, so nobody captures.Contrast: a clean
docker stophands over immediately: leg 4 of the same gate showed 1× recording with no gap across two failovers. Earlier gates (#491/#537, the SqlServer gate) exercised only the clean path.Options to consider:
Fixed in
91434e7f(merged to master).DriverHostActornow keeps its ownReachabilityEvent+MemberUpsubscription (InitialStateAsEvents, handled in Steady/Applying/Stale), caches the last redundancy snapshot, and on a reachability change re-derives and republishes only the historization verdict with unreachable peers excluded. A standby stood down for its mesh Primary (#537) therefore starts capturing as soon as that Primary is reported UNREACHABLE instead of after auto-down.ContinuousHistorization:CaptureWhilePrimaryUnreachable(defaulttrue;false= pre-#672).ShouldServiceAsPrimary/PublishPrimaryVerdict) are deliberately unchanged — tests pin both.MemberUpat that address (un-marking it would re-close the gate on a dead node).Live gate (docker-dev): SIGKILL of the recording Primary — capture gap 13 s (was ~31 s before the fix).
Follow-up filed for a few minor test-strengthening items.