Skip to content

RustQueue 0.8.2

Choose a tag to compare

@github-actions github-actions released this 29 Jul 09:31
· 3 commits to main since this release
7a17896

RustQueue 0.8.2

RustQueue 0.8.2 aligns no-Channel retention with NSQ, hardens the direct Broker
data path, and corrects premature Channel group commits. It completed short
OrbStack correctness and regression preflights, but the optional 60-run
performance qualification was not run and this release makes no formal
throughput claim.

No-Channel durability

  • A Topic now persists the earliest position published while it has no durable
    Channel. Normal GC cannot advance past this boundary, even after the 90-second
    bootstrap window or a Broker restart.
  • The first durable Channel consumes from that boundary. Deleting the last
    durable Channel starts a new boundary at the current Topic tail, so later
    acknowledged publishes remain available to its replacement.
  • Existing v7 Topic manifests without the new optional field are reconciled
    from the earliest retained position during open. The disk format remains v7
    and no migration command is required.
  • Later Channels created while another durable Channel already exists retain
    the existing 90-second bootstrap behavior.

Broker data path

  • A Channel commit worker now keeps collecting FIN and REQ requests until
    the end of its existing 1 ms coalescing window. A transiently empty receiver
    no longer forces an early durable commit.
  • The group remains bounded at 64 requests and the queue remains bounded at
    1,024 requests. Every successful operation still crosses the affected
    Channel WAL fsync before the client can observe completion.
  • Publish acknowledgement semantics, at-least-once delivery and on-disk format
    v7 are unchanged.

Benchmark correctness

  • Consumer shutdown preserves an NSQ frame that was only partly read when
    CLS begins. The benchmark can finish that frame without restarting the
    parser in the message body.
  • A warmup with consumers is fully delivered and durably acknowledged before
    the measured Topic starts. Warmup backlog can no longer inflate the measured
    drain time or Broker RSS.
  • A nonzero benchmark exit, missing delivery, unexpected duplicate, incomplete
    drain, or nonzero final Channel depth, in-flight count or deferred count is a
    hard failure before statistics are evaluated.

Benchmark protocol and release decision

The optional full qualification uses OrbStack only, with both Broker and load
generator fixed at 2 vCPU and 2 GiB. It compares the exact v0.8.1 tag with
one exact candidate commit using a fresh volume for every run.

Each case runs as 10 alternating pairs (A -> B, then B -> A), with a
30-second warmup and 120-second measurement. Consumer cases have a 1,800-second
upper bound for the mandatory complete drain; a timeout remains a hard failure:

  • raw write ceiling: one Topic, no consumer, 16 producers, 1 KiB messages and
    MPUB batch 64;
  • sustainable throughput: one Topic and one Channel, 16 producers, 16
    consumers, 1 KiB messages and MPUB batch 64, followed by a complete drain;
  • low-load guard: one Topic and one Channel, 16 producers, 16 consumers, 1 KiB
    PUB, and a fixed total arrival rate of 100 messages/s.

The evaluator uses a deterministic paired bootstrap of the geometric mean
candidate/baseline ratio. A throughput regression is reported only when the
one-sided 95% upper bound is below 0.95. Low-load PUB ACK p99 or peak Broker
RSS regresses only when the one-sided 95% lower bound is above 1.10.
Saturation RSS remains in every run record but is descriptive because a faster
candidate completes more work in the same measurement window.

Raw JSON, stderr and RSS samples remain under the ignored
benchmarks/results/ directory. By release decision, RustQueue 0.8.2 does not
include the optional compact 60-run artifact. Release readiness instead
requires the non-Kubernetes production gate, native x86_64 and aarch64 builds,
package checksums, and the existing compatibility tests.

Compatibility

  • The on-disk format remains v7; no data migration is required from 0.8.1.
  • NSQ V2 commands, TLS/mTLS, AUTH, compression and the opt-in Kodo profile keep
    their 0.8.1 compatibility contract.
  • Proxy, Operator, Console and Kodo routing are outside the performance change.

Assets

  • rustqueue-0.8.2-linux-x86_64.tar.gz: Linux x86_64 binaries, Console UI and
    example configuration
  • rustqueue-0.8.2-linux-aarch64.tar.gz: Linux ARM64 binaries, Console UI and
    example configuration
  • rustqueue-0.8.2-source.tar.gz: source archive for the tagged commit
  • rustqueue-0.8.2.tgz: Helm Chart
  • SHA256SUMS-0.8.2: SHA-256 checksums for all assets