Fix #460: GC probe cap #471

Merged
crueber merged 1 commit from fix/issue-460 into main 2026-09-13 17:22:03 +00:00
Owner

Child of #449 (F7). Raises maxForkNetworkProbes 64->512 (two probes/child, so ~256 direct children + transitive subtrees per pass); exhaustion still fails closed with nothing deleted. Refreshes stale one-level-per-pass comments (forknet.go, pulls model, features/03 §7 — the walk is breadth-first transitive in one pass; the cap, not depth, bounds it). Tests: TestForkNetworkGCWideFanout (40 children compact, measured cost pinned at exactly 81 GETs) + TestForkNetworkGCCapExceeded reworked to 300 children aborting safely. Full maintain suite -race green, coverage 95.5% (>=95% gate), vet/fmt clean. No new deps. No browser check needed (no browser-facing change). Residual bound stated in code + Decisions: fan-outs beyond ~256 children still defer; durable paged cursor is follow-up (needs bucket-side cursor state, a schema decision). Fixes #460.

Child of #449 (F7). Raises maxForkNetworkProbes 64->512 (two probes/child, so ~256 direct children + transitive subtrees per pass); exhaustion still fails closed with nothing deleted. Refreshes stale one-level-per-pass comments (forknet.go, pulls model, features/03 §7 — the walk is breadth-first transitive in one pass; the cap, not depth, bounds it). Tests: TestForkNetworkGCWideFanout (40 children compact, measured cost pinned at exactly 81 GETs) + TestForkNetworkGCCapExceeded reworked to 300 children aborting safely. Full maintain suite -race green, coverage 95.5% (>=95% gate), vet/fmt clean. No new deps. No browser check needed (no browser-facing change). Residual bound stated in code + Decisions: fan-outs beyond ~256 children still defer; durable paged cursor is follow-up (needs bucket-side cursor state, a schema decision). Fixes #460.
At two probes per child the 64 cap exhausted at ~32 direct children and
the sweep aborted every pass, so popular parents never compacted. The
walk is background maintain-path only (leased compact unit), so 512
exact-key GETs/pass is bounded law-6 cost. Fail-closed on exhaustion
preserved; fan-outs beyond ~256 children still defer (paged cursor is
documented follow-up). Tests: wide-fanout compacts with measured cost
(81 GETs), exhaustion aborts safely. Docs: features/03 Decisions.
Sign in to join this conversation.
No description provided.