fix(auditlog): prune per-site reconciliation state and pull-channel caches for sites absent from the enumeration; bound the abandoned-id set (review 2026-10-21 06/MEM-2)

This commit is contained in:
Joseph Doherty
2026-10-22 06:40:54 -04:00
parent 9e7e19c3c1
commit 38167bca88
7 changed files with 299 additions and 12 deletions
+9
View File
@@ -392,6 +392,15 @@ reports `MoreAvailable` and the cursor advances, mirroring `SiteCallAuditActor`.
**Mixed versions:** a pre-PERF-1 site still serves `Forwarded` rows; central
tolerates that unchanged (idempotent on `EventId`, merely more pages).
**Per-site state follows the site list (review 2026-10-21 06/MEM-2).** Each tick drops
the cursor, non-draining counter and stalled latch of any site no longer returned by
`ISiteEnumerator` (a latched site publishes `Stalled=false` as it goes), and the
`PullAuditEvents` / `PullSiteCalls` / `PullTraceEvents` invokers evict and dispose any
cached `(site, endpoint)` gRPC channel that is not a live site's primary or fallback
address on every enumeration. The in-memory abandoned-`EventId` short-circuit set is
capped at 10 000 entries (cleared when full — it is an optimisation only; the
deterministic synthetic id is what keeps re-abandonment idempotent).
**`PullTraceEvents` is a point read, not a reconciliation path (2026-09-05).** The
Flow Debugger's value-change run cannot get its steps inline (the device echo
triggers the run after the write reply has returned), so central polls the site