diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b83aca8..c4985f22 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.3] — 2026-07-29 + ### Added - **Task-exit parking for idle connections (c1M P1, `--conn-park-secs`, default 60 s).** A plain-TCP monoio connection that stays idle past the @@ -24,7 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 downshift), and the tokio runtime. `--conn-park-secs 0` disables. ### Fixed -- **c10k connection-plane wave (PR #TBD)** — from the 2026-07-29 empirical +- **c10k connection-plane wave (PR #421)** — from the 2026-07-29 empirical review (`tmp/C10K-REVIEW.md`: 10k/25k live-connection ramps, idle-CPU measurement, symbolized flames, pipeline-ratchet A/B on the Linux VM): - **Pipeline memory ratchet fixed (W1).** One 1024-deep pipeline diff --git a/Cargo.lock b/Cargo.lock index ea90fe2c..7e32ec57 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1816,7 +1816,7 @@ dependencies = [ [[package]] name = "moon" -version = "0.8.2" +version = "0.8.3" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index d7f2177d..1db3592c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "moon" -version = "0.8.2" +version = "0.8.3" 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 5f746c62..bc77c869 100644 --- a/README.md +++ b/README.md @@ -372,7 +372,8 @@ Redis 8.6.1.* | **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** | 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.8.2** | Storage kernel unification — one value codec / spill pipeline / eviction entry point / accessor skeleton, millisecond-TTL fidelity fix, batched sync-eviction manifest fsyncs | **GA** | +| **v0.8.3** (current) | Connection plane at scale — idle conns 56.5 → 3.25 KB (−94%, task-exit parking + idle downshift + TLS diet), loud maxclients, striped registry, c1M-ready (1 M idle ≈ 3.3 GB) | **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 0a8f8549..7c057c02 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,5 +1,10 @@ # Releases +## v0.8.3 — 2026-07-29 +milestones: none (patch release: the c10k/c1M connection-plane campaign, rounds 1–5) +waivers: none new — `XSHARD-READ-01` remains the open GA gap (ROADMAP R4), unchanged from v0.8.2. +evidence: Patch release rolling up the connection-plane campaign (#421 rounds 1–4, #422 round 5) plus an SDK reconnect fix. **Headline: idle-connection memory 56.5 → 3.25 KB/conn (−94%); 1 M idle connections ≈ 3.3 GB.** The campaign, measured end-to-end in `tmp/C10K-REVIEW.md` and designed in `.planning/rfcs/c1m-connection-plane.md`: **(1) memory** — pipeline ratchet fixed (one 1024-deep pipeline permanently pinned a conn at ~217 KB; now 47 KB, W1), per-conn task future dieted 9.3 → 5.9 KB by boxing cold suspend points (P3), W11 two-stage idle park sheds buffers to a 512 B probe (43.5 → 19.9 KB, loss-free cancel-and-await on both drivers), TLS diet vendors monoio-rustls + monoio-io-wrapper to make the wrapper's 32 KB eager buffers lazy + released on idle (87.5 → 47.4 KB/TLS-conn, P4b), and task-exit parking (`--conn-park-secs`, default 60 s) ends the handler task entirely for long-idle plain-TCP conns, leaving a tiny readiness watcher (19.8 → **3.25 KB/conn**, P1 — no vendor patch; monoio's public `readable()` is race-free on both drivers); **(2) correctness/operability** — loud `-ERR max number of clients reached` + RLIMIT_NOFILE check (W3), 16-way striped client registry (W5), deadline-heap blocking sweep O(due) (W6), SPSC drain rotation (W7), affinity-funnel load gate (W8), loud MOON_URING bypass warning (T3). **Validation:** every wave A/B-measured on the Linux VM at 10 k conns (same-binary flag A/Bs for W11/P4b/P1); GCE t2a hardware proof — idle 33.1 → 17.9 KB/conn (−46%), pinned p=1/p=16 perf-neutral; wire-parity suites on one continuous connection across park/wake cycles green on kqueue AND io_uring (`tests/parked_idle_parity.rs`, `tests/tls_idle_downshift_parity.rs`, `tests/maxclients_reject_parity.rs`); parked conns stay in CLIENT LIST and are killable (kill's `shutdown(2)` wakes the watcher). Independent lifecycle review clean; one documented Low (transient CLIENT LIST invisibility during the data-wake respawn window, same observable as a reconnect race). This release touches no crash/persistence path; the crash-matrix + soak gate is dispatched on the RC to hold the ritual (soak-first-then-tag). + ## 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.