0.16.0-rc1 Fix Validation
0.16.0-rc1 targeted fix-validation
Section titled “0.16.0-rc1 targeted fix-validation”Not a whole-milestone soak — a per-fix probe round for the specific 0.16 Flight + connector changes, each with a pass/fail threshold, plus a 3.5h drift soak to catch regressions the probes can’t. Run against a live 3-node Cassandra 5.0 cluster.
Verdict: the core read path is ship-grade; two of the three testable fixes don’t work in the field yet. The soak was flawless — ~32 qps for 3.5h with zero errors, flat RSS/fd/threads, zero OOM/restart, byte-exact integrity (1,703,038 rows start == end), and a 0.026% genuine-error SLI (down from 0.15’s 0.89%, now that the abort taxonomy decomposes it). But #2679 split pruning is inert and #2349’s UDT fix is unreachable behind a CQL-parser bug — both new, reproducible, and root-caused (filed #2806, #2807).
The full report is a self-contained dashboard with four linked views:
- Verdict — the probe table with evidence.
- Stability — RSS, fd/thread, egress, admission, and the new 0.16 gauges over the 3.5h soak.
- Probes — per-fix close-ups (split-pruning differential, UDT parse, abort taxonomy, snapshot grace-sweep).
- Comparison — 0.16.0-rc1 vs R11b / R12 / 0.15 and the Lane-B goals ladder.
Probe verdicts
Section titled “Probe verdicts”| Probe | Fix under test | Verdict |
|---|---|---|
| A | #2679 plan-time split pruning | REGRESSED — keyed reads still fan out to 13 splits across all pods (identical on/off). Reads an empty constraint.getSummary() instead of the pushed-down filterJson. Correctness fail-safe, optimization dead → #2806 |
| B | #2349 UDT registry in both read paths | BLOCKED — every UDT table fails DDL parse (code: Char) at keyspace-qualified type names (frozen<ks.udt>); the decode fix is unreachable → #2807 |
| C | #2372 BTI (da) tables over Flight | COULD-NOT-OBSERVE — no BTI corpus on the rig (testbed BTI provisioning is a separate follow-up) |
| D | #2681 do_get abort taxonomy | VERIFIED — client_cancel and admission_shed forced and bucketed; hard errors excluded from the abort SLI; genuine internal errors 0.026% over the soak |
| Soak | ~4h drift + integrity | VERIFIED — 3.5h @ 32-thr, ~32 qps, 0 errors, flat RSS/fd/threads, 0 OOM/restart, 1,703,038 rows start == end |
Three things to report
Section titled “Three things to report”- #2679 split pruning is inert — the connector pushes the partition-key predicate into the
table handle’s
filterJsonatapplyFilter, sogetSplits()sees an empty constraint summary and always falls back to full fan-out. The ~32–39 qps / fan-out-skew ceiling is unrelieved. - #2349 is blocked by a parser bug —
cql_parser.rsparses a UDT type as a single identifier that stops at., but Cassandra always emits UDT columns keyspace-qualified, so every real UDT table is unreadable via Flight. - The rig metrics-pipeline fix is now durable — the soak-0.15
resourcedetectionfix was being reverted by kit start/stop (the OTel config regenerates from the built binary); rebuilding the dist makes it hold through kit churn.rate()is per-host_name, no inflation.
Run metadata: flight
0.16.0-rc1@sha256:79c7907d(multi-arch INDEX, src f4f13a7cb) · connector 0.16.0-rc1 · Trino 481 · Cassandra 5.0.8 RF=3 · 3× i4i.xlarge · ~1.70M partitions/node (new integrity anchor — #2789 read-time TTL expiry landed in this build) · 2026-07-21.