From d6a951b9e16f899be08995014bcef0b91ec8aacf Mon Sep 17 00:00:00 2001 From: Tin Dang Date: Mon, 20 Jul 2026 13:50:45 +0700 Subject: [PATCH] =?UTF-8?q?release:=20v0.8.2=20=E2=80=94=20storage=20kerne?= =?UTF-8?q?l=20unification=20(W1=E2=80=93W6)=20+=20millisecond-TTL=20fidel?= =?UTF-8?q?ity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patch release rolling up the storage-unification stacked train (#396–#401) and the follow-up db.rs directory split (#403). Correctness: millisecond-TTL keys no longer expire up to 999 ms early (CompactEntry stored expiry as ms/1000-floored seconds; now absolute Unix ms end-to-end, exact PTTL readback, exact-ms RDB round-trips). Unification (behavior-preserving, pinned by golden byte-spec tests): one value codec behind RDB/spill/kv_serde with fail-closed corrupt decode + DoS count guards on every path; one spill pipeline — sync eviction batches victims into shared files (~N/256 manifest fsyncs instead of N per-key) and retains unserializable victims fail-closed; one eviction entry point (evict_to_budget + EvictionRun/EvictionSink, was 13 variants / 5 reclaim-loop copies); one typed-accessor skeleton (storage::db_kind static-dispatch markers); AofShardManifest rename; db.rs split into db/{mod,hash_ttl,kv_ops,accessors}.rs. Validation: same-VM A/B v0.8.1-vs-main — p=1 parity-or-better, eviction-plain faster every paired round, spill +3%, p=16 within noise. Release gate: crash-matrix nightly full matrix + ITERS=20 soak dispatched on the RC, green before tag (soak-first-then-tag). Rolls CHANGELOG [Unreleased] into [0.8.2], bumps Cargo.toml/lock, adds the RELEASES.md row, updates the README milestone table. author: Tin Dang --- CHANGELOG.md | 2 ++ Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 3 ++- RELEASES.md | 5 +++++ 5 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb8f2ba8..dd2aabea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.8.2] — 2026-07-20 + ### Fixed - **Millisecond-TTL keys no longer expire up to 999 ms early (W3).** `CompactEntry` stored expiry as *seconds* (`ms / 1000` floor) even though diff --git a/Cargo.lock b/Cargo.lock index d48ef050..323d2e6a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1820,7 +1820,7 @@ dependencies = [ [[package]] name = "moon" -version = "0.8.1" +version = "0.8.2" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index 06b3a7c6..98b3fff0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "moon" -version = "0.8.1" +version = "0.8.2" edition = "2024" rust-version = "1.94" description = "A high-performance Redis-compatible server written in Rust" diff --git a/README.md b/README.md index 29c5825d..5f746c62 100644 --- a/README.md +++ b/README.md @@ -371,7 +371,8 @@ Redis 8.6.1.* | **v0.6.0** | Multi-db isolation (db-scoped indexes + per-db quotas + workspace hardening), tiered engine offload (WARM/COLD), `--profile standalone`, command-parity audit | **GA** | | **v0.7.x** | Replication GA for multi-shard masters — `WAIT`/`ACK` across all six planes, 24 h kill-9 soak (zero acked-write loss) | **GA** | | **v0.8.0** | One Storage Kernel — kill-9-lossless on every plane (46-cell crash matrix) + 10× RAM datasets under disk offload | **GA** | -| **v0.8.1** (current) | Deploy-safe busy-poll (O3 contention governor auto-gates on shared cores) + single-shard tuning preset | **GA** | +| **v0.8.1** | Deploy-safe busy-poll (O3 contention governor auto-gates on shared cores) + single-shard tuning preset | **GA** | +| **v0.8.2** (current) | Storage kernel unification — one value codec / spill pipeline / eviction entry point / accessor skeleton, millisecond-TTL fidelity fix, batched sync-eviction manifest fsyncs | **GA** | | **v0.9** | Horizontal scale — cluster-on-monoio + multi-shard replicas | planned | | **v1.0** | Every [`PRODUCTION-CONTRACT.md`](docs/PRODUCTION-CONTRACT.md) GA box ticked | gate | diff --git a/RELEASES.md b/RELEASES.md index 168b8ea1..0a8f8549 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,5 +1,10 @@ # Releases +## v0.8.2 — 2026-07-20 +milestones: none (patch release: the storage-unification campaign W1–W6 + db.rs directory split) +waivers: none new — `XSHARD-READ-01` remains the open GA gap (ROADMAP R4), unchanged from v0.8.1. +evidence: Patch release rolling up the storage-unify stacked train (#396–#401) plus the follow-up `storage::db` directory-module split (#403). **Correctness:** millisecond-TTL keys no longer expire up to 999 ms early — `CompactEntry` stored expiry as seconds (`ms/1000` floor); it is now absolute Unix milliseconds end-to-end with exact `PTTL` readback and exact-ms RDB round-trips (W3, #398). **Unification (behavior-preserving by design, pinned by golden byte-spec tests):** one value codec behind RDB + spill + kv_serde with fail-closed corrupt-score decode and the RDB-DoS count guards now on every decode path (W1, #396); one spill pipeline — sync eviction batches victims into shared files (~N/256 manifest fsync round-trips instead of N per-key, measured every-paired-round faster under maxmemory pressure) and unserializable victims are retained fail-closed instead of spilled empty (W2, #397); one eviction entry point `evict_to_budget` + `EvictionRun`/`EvictionSink` replacing 13 name-encoded variants and 5 reclaim-loop copies (W4, #399); one typed-accessor skeleton via `storage::db_kind` `ValueKind`/`OwnedKind` static-dispatch markers, public per-type methods kept as thin delegators (W5, #400); `AofShardManifest` rename + tier-vocabulary disambiguation docs (W6, #401); `db.rs` (3113 lines) split into `db/{mod,hash_ttl,kv_ops,accessors}.rs`, pure code motion (#403). **Validation:** same-VM A/B (v0.8.1 vs main, alternating rounds) — p=1 SET/GET parity-or-better, eviction-plain faster in every paired round, offload-spill +3%, p=16 within noise; every train PR individually gated (lib suites macOS + VM Linux both runtimes, crash matrix 46/46 + kill-9 suites on the durability PRs, clippy ×2 feature sets); release gate — crash-matrix nightly full matrix + `ITERS=20` soak dispatched on the RC via `workflow_dispatch`, green before tag (soak-first-then-tag). Known flake ticketed: #402 (`test_bg_compact_pool_parallelism`, timing-sensitive, test-only). + ## v0.8.1 — 2026-07-19 milestones: none (patch release folding the post-v0.8.0 perf/correctness train + the single-shard tuning preset) waivers: none new — `XSHARD-READ-01` remains the open GA gap (ROADMAP R4), unchanged from v0.8.0.