RustQueue 0.8.2
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
FINandREQrequests 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 WALfsyncbefore 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
CLSbegins. 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
MPUBbatch 64; - sustainable throughput: one Topic and one Channel, 16 producers, 16
consumers, 1 KiB messages andMPUBbatch 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 configurationrustqueue-0.8.2-linux-aarch64.tar.gz: Linux ARM64 binaries, Console UI and
example configurationrustqueue-0.8.2-source.tar.gz: source archive for the tagged commitrustqueue-0.8.2.tgz: Helm ChartSHA256SUMS-0.8.2: SHA-256 checksums for all assets