CQLite v0.18.0
CQLite v0.18.0 — the SSTable toolbox
Section titled “CQLite v0.18.0 — the SSTable toolbox”The first offline tools for damaged Cassandra 5.0 SSTables, a raw SSTable view that shows the physical rows behind a read, and the move to Arrow 59 and Rust 1.95. It targets stock Cassandra 5.0 with no server-side changes. Full detail, including every limit and breaking change: release notes and the CHANGELOG.
🧰 Detect, salvage, repair
Section titled “🧰 Detect, salvage, repair”Four offline verbs, each with JSON output and a documented exit-code contract:
cqlite verifynow reports where the damage is: component, byte offset, compression chunk and the partitions involved (#4194).cqlite sweep <data-dir>verifies every generation under a Cassandra data directory and reports each asok,degraded,corruptorunreadable(#4194).cqlite salvage <input> --out <dir>recovers every fully decodable partition of a damaged SSTable into a fresh generation and writes a loss manifest of what could not be saved (#4196).cqlite rebuild <input> --components … --out <dir>regeneratesIndex.db,Summary.db,Filter.db,Digest,TOCandCRCfrom a healthyData.db, which it never modifies (#4197).
All four are in the packaged CLI: write-support is now a default feature (#4379). Limits: BTI
locations are unresolved (#4337), salvage needs an intact partition index, and
rebuild --in-place is not available yet. More verbs (explain, scrub, diff, diagnose, …)
are planned for 0.19.
🔬 Raw SSTable view
Section titled “🔬 Raw SSTable view”Query <ks>.<table>_raw_sstable_data like any table to get rows before reconciliation, one per
row per SSTable generation, with each cell’s write timestamp, TTL and tombstone flag, row,
partition and range deletions, and the source file and position (#4222). It matches sstabledump
on all 22 spec fixtures (#4309).
Writer statistics are derived from the rows actually written, fixing a byte-parity gap with Cassandra (#4246); the CommitLog reader rejects more malformed input (#2798); each release now ships a self-contained Trino connector jar (#2869); Arrow, Parquet and Flight move to 59 (#4236).
⚠️ Breaking changes
Section titled “⚠️ Breaking changes”Minimum Rust version 1.95; Arrow 59 types in cqlite-core’s arrow/parquet API; CommitLog
PartitionUpdate gains a columns_read field; cqlite-cli default features include
write-support. Details in the CHANGELOG.
Known issues
Section titled “Known issues”A scan over an unreadable SSTable still returns empty rather than an error (#4159). Still open
from the 0.17 field run: an unbounded count(*) through the Trino cqlite catalog can stall
(#4170), scans are served by one Flight pod (#4175), timeuuid maps to varchar (#4173).
Get it
Section titled “Get it”brew install pmcfadin/cqlite/cqlite # CLI (macOS + Linux)cargo add cqlite-core # Rust librarypip install cqlite-py # Pythonnpm install @cqlite/node # Node.js