Skip to content

v0.8.0 — Alpha

Pre-release
Pre-release

Choose a tag to compare

@jamesgober jamesgober released this 08 Jun 12:54
· 3 commits to main since this release

lsm-db v0.8.0 — Alpha

The soak begins. v0.8.0 is the alpha in the run to 1.0. The engine is
feature-complete, hardened, and API-frozen; this release adds no behaviour and no
public surface — it broadens coverage to a sustained, consumer-shaped workload
across restarts, the way a real consumer exercises an index. From here to 1.0 is
soak and polish.

What is lsm-db?

A log-structured merge-tree storage engine for Rust — the write path that powers
RocksDB, LevelDB, Cassandra, and ScyllaDB, packaged as a small, audited library.
It is the storage layer the portfolio's database crates (txn-db, Hive DB) build
on, so the durability and read/write contract is implemented and tested once.

What's new in 0.8.0

A sustained workload across restarts

tests/soak.rs drives the engine the way a real consumer does: tens of thousands
of interleaved puts, overwrites, and deletes over a bounded key space, with a
small write buffer and a low compaction trigger so flushes and background
compactions run throughout — punctuated by close-and-reopen cycles standing in
for process restarts. After every phase the engine is checked, key for key and
over a full scan, against a BTreeMap reference model: no key lost, duplicated,
or resurrected across flushes, compactions, and reopens. Under --all-features
the same workload exercises the write-ahead log and bloom filters together, and a
companion test pins ranged scans to the model under churn.

Why no new API

The alpha phase is for integrating against real consumers and fixing what they
surface. The embedded key-value contract — open, put, get, delete, scan, flush,
plus tunable buffer / compaction / cache and the optional durability and bloom
features — already covers that surface, so nothing new was added. The API stays
frozen.

Breaking changes

None. This release adds tests only.

Verification

Green on Windows x86_64 and Linux (WSL2), Rust stable and MSRV 1.87; macOS via the
CI matrix:

cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test
cargo test --all-features
RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-features
cargo +1.87 clippy --all-targets --all-features -- -D warnings
cargo +1.87 test --all-features
RUSTFLAGS="--cfg loom" cargo test --test loom_lsm
cargo deny check
cargo audit

All green. Counts at this tag:

  • Default features: 59 unit + 4 integration + 2 compaction + 6 recovery +
    3 property + 4 adversarial + 5 edge-case + 2 soak + 25 doctests.
  • --all-features: 74 unit + 6 bloom + 8 durability + 4 integration +
    2 compaction + 6 recovery + 3 property + 6 adversarial + 5 edge-case +
    2 soak + 25 doctests.
  • loom: 2 model checks.

What's next

  • 0.9.0 — Beta. Bug fixes only; final benchmarks captured; broader testing.
  • 0.9.5 — RC. Critical fixes and documentation polish only.
  • 1.0.0 — Stable. Definition-of-Done audit and publication.

Installation

[dependencies]
lsm-db = "0.8"
# Crash-safe writes and/or bloom-filtered point reads:
lsm-db = { version = "0.8", features = ["durability", "bloom"] }

MSRV: Rust 1.87 (2024 edition).

Documentation


Full diff: v0.7.0...v0.8.0.
Changelog: CHANGELOG.md.