Skip to content

NoKV 0.12.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 07:57
· 141 commits to main since this release
3033162

NoKV 0.12.0 makes NoKV fast and conflict-free under agent workloads, where many agents edit their own documents, commit session logs, and call the CLI once per tool call.

Highlights

  • Independent documents no longer conflict. Metadata writes run in sequenced write sessions, so a write to one document cannot invalidate another (#544). On the Pi agent harness, every trial now passes at 16 agents. Before, pre-release main failed them with read-version mismatch.
  • Small artifacts publish in one request. A body of up to 16 KiB is stored inline in shard metadata and published with one request and one durable acknowledgement (#552). A larger one-batch artifact publishes with two fused requests instead of five (#547).
  • Lower cost per call:
    • connections are reused (#545);
    • nokv workbench-session keeps one admitted client across many tool calls (#545);
    • read-only commands skip object-provider admission (#547);
    • RPC frames go out in one write with TCP_NODELAY (#533).
  • Appends stop rereading and reuploading whole files. Appends use logarithmic rewrites and a resumable body digest (#548). Append retries are durable across processes (#522).
  • Single-host deployments can run without etcd. --control-dir PATH keeps placement and owner sessions in a local directory, with OS file locks as owner sessions (#549). Multi-host deployments keep etcd, and each ownership proof is now one linearizable read (#546).
  • Time-ordered ids. Request, operation, and revision ids are now time-ordered, so a checkpoint no longer rewrites nearly every metadata page (#550).
  • Holt 0.8.7. NoKV now requires it: concurrent atomic batches share WAL fsyncs, and frame writes cover only the used extent.

Performance

Release check on the Pi durable agent harness. It covered W1 (workspace files in NoKV) and W2 (session logs committed to NoKV as well), at 1, 4, and 16 agents, with 3 rotated repetitions per cell on fresh storage. The host was one Apple M3 Pro laptop running one NoKV owner, with RustFS in Docker. Throughput is the median of passing trials, in turns/s. "fails" means every trial failed.

Workload Agents Pre-release main 0.12.0, etcd 0.12.0, local control SQLite reference
W1 1 5.86 20.64 25.43 22.26
W1 4 8.47 28.15 27.84 29.77
W1 16 fails 50.12 47.58 51.04
W2 1 0.38 12.47 16.84 23.71
W2 4 fails 21.49 22.32 29.99
W2 16 fails 42.39 45.06 52.09

All 36 trials of 0.12.0 passed file verification with no tool errors. Disk writes per 1,000 session commits fell from 394–455 MB to 84–165 MB in W1, and from 8,794 MB to 209–248 MB in W2. The SQLite reference writes 62–64 MB.

SQLite runs in WAL mode with synchronous=FULL and fullfsync. It is an embedded reference floor without versioned artifacts, conditional publish, exact references, object-store bodies, or tenant isolation.

The raw per-trial data, the harness, and the method are in the evidence gist.

Breaking changes: upgrade clients, the CLI, and owners together

  • Wire protocol. The workspace RPC schema is nokv.workspace.rpc.v14, and its handshake refuses 0.11.x clients and owners.
  • Storage format. Metadata is stored in System format 14. A 0.12.0 owner refuses to open a format-13 store written by 0.11.x, and there is no migration. Start 0.12.0 owners on a new metadata store.

Install

Homebrew (macOS):

brew install NoKV-Lab/tap/nokv     # or: brew update && brew upgrade nokv
nokv version --json

Python SDK (abi3 wheels for Linux x86_64/aarch64 and macOS arm64/x86_64, CPython 3.9+):

pip install "nokv==0.12.0" \
  --find-links "https://github.com/NoKV-Lab/NoKV/releases/expanded_assets/v0.12.0"

From source:

cargo build --release -p nokv --bin nokv

Pull requests since 0.11.1

  • #544 perf(meta): sequence metadata writes so independent documents stop conflicting
  • #545 perf(rpc): reuse admitted connections and add a persistent workbench-session mode
  • #546 perf(control): prove ownership with one etcd read and keep paged reads stable
  • #547 perf(rpc): publish one-batch artifacts with two fused requests
  • #548 perf(client): append with logarithmic rewrites and a resumable body digest
  • #549 feat(control): add a single-host control directory as an alternative to etcd
  • #550 perf(ids): mint time-ordered request, operation, and revision ids
  • #552 perf(publish): store small artifact bodies inline in shard metadata
  • #553 release: NoKV 0.12.0
  • #533 fix(transport): send each RPC frame in one write and set TCP_NODELAY
  • #522 feat: make append retries durable across processes
  • #518 feat(workbench): bring up the LoopX Stage 2A stack from one command
  • #535 deps: batch the pending Dependabot bumps
  • #534 fix(ci): satisfy Rust 1.99 lints and pin the CI toolchain
  • #521 docs: mark LingTai collaboration as historical