mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 00:16:59 +00:00
Backlog item 2 (small-REQ dispatch floor), first cut. relayBench at 50k shows geode ~2.5x slower than strfry when a REQ returns ~20 events (author-archive 1.18 vs 0.48 ms EOSE p50) while WINNING the 500-event scenarios — with tiny results the fixed per-REQ cost dominates. A new stage benchmark (SmallReqFloorBenchmark) decomposes the floor: at ~21 rows, raw SQL is 0.18 ms and the remaining ~0.42 ms is live-subscription machinery plus per-REQ coroutine dispatch. A REQ whose filters all carry a limit summing to <= 256 now runs its stored replay inline on the receive coroutine and only retains a live-tail handle (SessionBackend.queryRawInline; LiveEventStore's queryRaw is re-expressed on the same core) — no per-REQ launch, no Job, no dispatcher handoffs, no awaitCancellation scaffolding. Unbounded REQs keep the launched path so CLOSE can always interrupt a giant replay. In-process time-to-EOSE for ~21-row REQs drops 0.60 -> 0.50 ms; the bigger effect expected under concurrency (no per-REQ Job+dispatch churn) is relayBench's to judge. InlineReqFastPathTest pins wire-behavior parity: stored-then-EOSE ordering, live tail delivery and CLOSE detachment, same-subId replacement, launched fallback for unbounded and over-cap REQs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TtDNpayEYvJH7QuPswND3A