GA verification round before 0.17 · flight v0.16.0@sha256:74b12ccd (multi-arch INDEX; amd64 a45cac03 / arm64 f2f78d0b; also latest) · connector 0.16.0 (Maven Central) · Trino 481 · Cassandra 5.0.8 RF=3 · 3× i4i.xlarge · ~2.5M partitions/node · 2026-07-23
#2806 split pruning, #2807 UDT parse, and #2815 collection-column exposure. Split pruning delivers a measured −18% p50 / −4× coordinator CPU on isolated keyed reads. One residual (structured in-collection UDT decode) is a natural 0.17 follow-up, not a GA regression.| Fix | RC1 (pre-release) | 0.16.0 GA | Verdict |
|---|---|---|---|
| #2806 / #2679 split pruning | Inert — 13 splits on/off, no benefit | 1 split, −18% p50, −4× CPU | fixed |
| #2807 UDT keyspace-qualified parse | Parse crash (code: Char), every UDT table unreadable | All UDT tables parse & query | fixed |
#2349 scalar frozen<udt> decode | Blocked behind the parse crash | {street: 2 Oak, zip: 10001} readable | verified |
#2815 list<frozen<udt>> silent drop | Column absent from schema (data-loss-class, found rc2) | Column present; SELECT * returns it | symptom fixed |
#2372 BTI (da) over Flight | Could-not-observe (no da corpus) | Not tested (no da corpus) | could-not-observe |
Method: Trino server-side elapsedTimeMillis + totalSplits via the REST API, driven from the control node against the Trino service clusterIP (no port-forward, no wall-clock noise). 60 samples/mode = 3 warmed passes over 20 distinct keys. Kill-switch = cqlite.split-pruning-enabled, pods restarted between modes.
Isolated WHERE key = ? | splits | p50 | p90 | p99 | coordinator CPU p50 |
|---|---|---|---|---|---|
| pruning ON | 1 | 152 ms | 195 ms | 257 ms | 2 ms |
| pruning OFF | 13 | 185 ms | 208 ms | 241 ms | 8 ms |
Collapsing the 13-way fan-out to the single owning split cuts p50 latency −18% and coordinator CPU −4×. Smoke checks: IN(2 keys) ON=1 / OFF=13 splits; WHERE key=? LIMIT 1 ON prunes / OFF full fan-out — all correct, identical rows, 0 errors either mode.
| Mode | steady qps | p50 | p99 | cold ramp (30s: qps / p99) | errors |
|---|---|---|---|---|---|
| pruning ON | ~33.0 | ~967 ms | ~1195 ms | 15.7 qps / 6384 ms | 0 |
| pruning OFF | ~33.9 | ~937 ms | ~1462 ms | 9.9 qps / 8492 ms | 0 |
Steady-state throughput is equal (~33 qps both) — pruning does not raise the throughput ceiling, which is owned by the known fan-out skew (#2680) and snapshot-resolve floor, not split count. But pruning ON has a markedly faster cold ramp and better tail (p99 −18% steady; 6384 vs 8492 ms cold) because 13× fan-out is expensive to warm.
list<frozen<udt>> column was silently dropped from the projected schema — a data-loss-class omission. In GA the column is back: DESCRIBE udt_simple lists addrs and SELECT * returns it. The residual: elements come back as array(varchar) of raw serialized UDT bytes (e.g. 0x000000053120456c6d0000000400002b67 = "1 Elm"/11111, decoded by hand and matched field-for-field against sstabledump), not a structured array(row(street,zip)). Data is correct and complete and reachable — it is simply not typed yet. Strictly better than rc2 (where the column vanished entirely); the deeper in-collection structured decode (#2349's further target) is a clean 0.17 candidate, not a GA blocker.