Skip to content

chore: release datawal 0.1.4 (first non-alpha)#30

Merged
robertoberto merged 3 commits into
mainfrom
release/0.1.4
May 21, 2026
Merged

chore: release datawal 0.1.4 (first non-alpha)#30
robertoberto merged 3 commits into
mainfrom
release/0.1.4

Conversation

@robertoberto
Copy link
Copy Markdown
Contributor

Summary

First non-alpha release of datawal. Promotes 0.1.0-alpha.1 directly to 0.1.4, dropping the alpha qualifier and skipping 0.1.1 / 0.1.2 / 0.1.3 (intentional: each PR in the kit was a quality increment, not a hotfix).

This is the 8th and closing PR of the 0.1.4 quality kit. The 7 PRs already merged into main since 0.1.0-alpha.1:

PR Title sha
#23 RecordLog::scan_iter (record-level lazy iterator) d66e960
#24 CLI inspect (scan / get / report / verify / dump) 34a5a89 (merge)
#25 Hardening tier-1 (proptest + multi-process lock + tmpfs disk-full + poison-writer) ce74484
#26 Soak driver + synthetic fixtures b69071e
#27 RecordLogReader (lockless reader) + formal/ReadWhileWrite.tla 0d3cae8
#28 Keydir stores offsets, CRC32C revalidated on every get ef1530f
#29 CLI export / compact / check ae50f8f

What changed in this PR

  • Cargo.toml: workspace.package.version 0.1.0-alpha.1 -> 0.1.4.
  • Cargo.lock: regenerated.
  • CHANGELOG.md (new): documents the 0.1.4 surface and the alpha history.
  • README.md: adds the first non-alpha release disclaimer agreed in the kit plan.
  • docs/benchmarks/v0.1.4-reference.md (new): release-quality benchmark report. Numbers are TBD pending a real-hardware run on the dia host (Micron T700 PLP). The file is checked in so this PR can be reviewed without blocking on bench scheduling, but the v0.1.4 tag MUST NOT be pushed until the benchmark file is updated with real numbers — the tag-push triggers publication to crates.io, and a release without honest bench numbers would undermine the disclaimer in README.md.

No code changes. No public-surface change. No MSRV change. No wire-format change.

Local validation (6 gates green)

  • cargo fmt --all -- --check
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace --all-targets (~150 tests, 0 failures; CLI suite 33 tests)
  • RUSTDOCFLAGS='-D warnings' cargo doc --workspace --no-deps
  • cargo bench --workspace --no-run
  • cargo publish --dry-run -p datawal --allow-dirty

Merge + release procedure

  1. CI must be green on this PR (rust stable + 1.75.0, formal TLC, corpus, fuzz build, publish-dry-run).
  2. Owner runs the criterion benches on the dia host (Micron T700 PLP) and amends / follow-up commits the real numbers into docs/benchmarks/v0.1.4-reference.md on this branch.
  3. Owner squash-merges this PR into main.
  4. Owner pushes the v0.1.4 tag pointing at the resulting main commit. The tag-gated release job in CI runs cargo publish -p datawal against crates.io using the CARGO_REGISTRY_TOKEN secret.
  5. Owner verifies on docs.rs (5–10 min queue) and via a scratch crate (cargo add datawal --version 0.1.4).

Closes / Refs

Closes the 0.1.4 umbrella tracking (kit completion).
Refs #18 (closed by PR #29).

Cuts the first non-alpha release of datawal. The version jump from
0.1.0-alpha.1 directly to 0.1.4 (skipping 0.1.1 / 0.1.2 / 0.1.3) is
intentional: each PR in the kit was a quality increment, not a
hotfix, and the 'alpha' qualifier is dropped now that the crate has
been validated in active use.

Changes in this PR:

- Cargo.toml: workspace.package.version 0.1.0-alpha.1 -> 0.1.4.
- Cargo.lock: regenerated by cargo with the new version.
- CHANGELOG.md (new): documents the 0.1.4 surface (record-level lazy
  iterator on RecordLog, RecordLogReader, keydir-by-offset, poison
  writer + is_poisoned, datawal CLI with 8 subcommands) and the
  alpha history.
- README.md: adds the 'first non-alpha release' disclaimer
  agreed in the kit plan.
- docs/benchmarks/v0.1.4-reference.md (new): release-quality
  benchmark report, scaffold only. Numbers are TBD pending a
  real-hardware run on the dia host (Micron T700 PLP); the file is
  checked in so the release PR can be opened and reviewed without
  blocking on bench scheduling.

The v0.1.4 tag MUST NOT be pushed until the benchmark file is
updated with real numbers; the tag-push triggers publication to
crates.io, and a release without honest bench numbers would
undermine the disclaimer in README.

No code changes. No public-surface change. No MSRV change. No
wire-format change.

Closes the 8-PR 0.1.4 quality kit (PRs #23, #24, #25, #26, #27, #28,
#29 already merged; this is #26 of the kit plan).

Refs #18 (kit umbrella tracking issue; closed by PR #29).
Replaces the TBD scaffold in docs/benchmarks/v0.1.4-reference.md
with the numbers from the criterion run on the dia host
(DATAWAL_BENCH_DIR on ext4 with relatime,discard, NVMe-PLP).

Stack:
  ext4 with relatime,discard, on a single NVMe-PLP
  raw fsync(64B) median 1785 us, p10 1720 us, p90 1858 us

Highlights vs alpha (where comparable):
- append_no_fsync: ~same as alpha (codec path unchanged).
- append_fsync_each: ~1.78 ms (alpha reported ~3.7 us; see below).
- datawal_get: ~700-780 ns (alpha ~30-46 ns). Expected: PR #28
  keydir-by-offset adds one pread + CRC32C verify per get.
- datawal_open_rebuild: ~25.6 ms at 100k (alpha ~39 ms). Faster
  by design: offset-keydir does not materialise values on replay.
- compact_to: 3-9x slower than alpha. Two factors, both expected:
  (1) real-fsync floor, (2) PR #28 re-reads each live value via
  fd-pool LRU instead of copying from memory.

Bench-dir caveat (the reason the alpha numbers differed so much in
fsync-bearing tables): a raw-fsync sanity check on the same machine
gave 0.59 us on tmpfs vs 1785 us on ext4. The alpha-reference
single-digit-microsecond fsyncs are only consistent with a tmpfs
bench dir (i.e. DATAWAL_BENCH_DIR unset, defaulting to /tmp). The
v0.1.4 run was collected with DATAWAL_BENCH_DIR pointing at the
real ext4 mount, so the new numbers reflect honest durability
costs. A retrospective note has been added at the top of
v0.1.0-alpha-reference.md flagging this; historical numbers in
that doc are kept verbatim as a record of what was published.

Code in this PR: docs only. No source / config / Cargo.* changes.
The release/0.1.4 branch is now ready for merge + tag v0.1.4 push
once the rest of the PR review wraps.
The v0.1.0-alpha-reference.md document reported single-digit
microsecond fsync latencies that were inconsistent with the
ZFS-on-NVMe stack described in its own Stack table. A raw-fsync
sanity check on the same machine confirmed: ~0.59 us on tmpfs,
~1785 us on real ext4. The alpha numbers are consistent with a
tmpfs bench directory (DATAWAL_BENCH_DIR unset, defaulting to
/tmp), not the documented hardware path.

Rather than keep a doc that quietly misrepresents the cost of
durable writes, this commit deletes it. v0.1.4-reference.md (with
real ext4-NVMe numbers + the raw-fsync sanity check disclosed)
supersedes it.

Changes:
- docs/benchmarks/v0.1.0-alpha-reference.md: deleted (223 lines).
- README.md, docs/benchmarks.md: repoint the 'reference run' link
  from v0.1.0-alpha-reference to v0.1.4-reference.
- docs/benchmarks/v0.1.4-reference.md: drop the now-orphan
  'How this differs from the alpha reference' section and the
  in-table 'slower/faster than alpha' phrasings; the doc now
  stands on its own as the canonical reference. The Stack section
  keeps the raw-fsync sanity-check numbers (tmpfs vs ext4) so any
  reader who finds a stale link or has cached copy of the alpha
  numbers can see the reason.
@robertoberto robertoberto merged commit 1df4d4b into main May 21, 2026
7 checks passed
@robertoberto robertoberto deleted the release/0.1.4 branch May 21, 2026 15:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant