Phases — close-ups

v0.15.0 milestone snapshot (condensed) · flight v0.15.0@sha256:30c2b10c (multi-arch INDEX) · connector 0.15.0 · Trino 481 · Cassandra 5.0 RF=3 · 3× i4i.xlarge · ~1.93M partitions/node, 2 SSTable gens · 2026-07-17

Phase 0 — cold start (claim 7)

MetricValueBar
time-to-first-query (cold keyvalue)2.22sLane-B B4 ≤3sMET
JDBC floor (SELECT 1)2.37s
boot RSS per pod4–5 MiLane-B B4 idle ≤16MiMET
index parses at boot0 (metric absent)zero (#2412)MET

Cold ≈ warm ≈ JDBC floor — the Summary-guided open (#2412) means no cold-parse penalty. No parse storm at boot.

Phase 2 — overload burst (claims 2, 3)

Metric32-thr (Phase 1)80-thr burstRead
qps~39~37–39ceiling — extra threads queue
p50 / p99798 / 1366ms2037 / 2713mslatency rises, no collapse
client errors00graceful
admission (limit 64)2–34bounded, never near cap
Admission permits: in-use vs limit (64) — headroom throughout
Admission permits: in-use vs limit (64) — headroom throughout

Phase 3 — quiet-drain (claim 4) — the key regression test

R12 held 738 snapshots while idle >10min (query-triggered only). 0.15 drains on the background sweep alone.

Phases 1–2 left 660 cqlite-* snapshots on the keyvalue table. With the table then left completely quiet (zero queries), the backlog collapsed 660 → 6 at t=5min — the background grace-sweep firing on its own. The residual 6 (2 recent snapshots × 3 nodes) is the Phase-2 tail still inside the 10-min retire-grace.

0200400600background sweep fires — 660→6, zero queries024568101214minutes (quiet — zero queries to keyvalue)

Phase 5 — restart / failover (claim 7)

ActionResult
Kill one flight pod mid full-ring countcount returned 1,927,467 (identical), 0 err — failover to RF=3 replicas
DaemonSet recreate victimRunning 1/1 in ~79s
Trino coordinator restartclean rollout; cqlite catalog + add-opens survived; first-query 3.42s
fd/RSS step-change after recoverynone (no leak; fresh pod idle lower, no upward step)