Repository navigation
Releases: shaunlee/beanstalkd-rs
Releases · shaunlee/beanstalkd-rs
Release list
beanstalkd-rs 0.5.1
Packaging, documentation and dependency updates: no protocol, binlog,
cluster or command line changes, so 0.5.0 and 0.5.1 are interchangeable and
a rolling upgrade between them is a plain restart.
Added
- crates.io: the server is published as the
bstkdpackage
(cargo install bstkd; the binary is stillbeanstalkd-rs), and
cargo binstall bstkdinstalls it too. The package isbstkdbecause
beanstalkd-rson crates.io is
an unrelated client library. The crates it builds on (bstk-proto,
bstk-engine,bstk-store,bstk-net,bstk-raft, plus
bstk-engine-oracle, the frozen engine its tests compare against) are
published too, in dependency order, byscripts/publish.sh. scripts/demo.sh: a demo with no dependencies beyond bash, python3
and curl. It runs a producer and a worker over the protocol, reads
/metrics, sends SIGTERM and restarts on the same binlog to show that
the jobs survived.- README: a "Migrating from beanstalkd" section (the protocol and the
command line are compatible; the binlog directory is not, plus the other
behavior changes), "Is it ready?" (the test evidence) and "When
something else fits better". - crates.io metadata for every published crate (description, keywords,
categories, README) and[package.metadata.binstall]for the server.
Changed
- The server package is named
bstkdinstead ofbstk-server. The binary,
the release archives, the container image and the systemd unit are still
beanstalkd-rs. - Dependencies: rustls 0.23.46, rustls-webpki 0.103.16 and tokio 1.54.1,
which fix RUSTSEC-2026-0346, -0347, -0382 and -0386.
beanstalkd-rs 0.5.0
First release. A Rust reimplementation of
beanstalkd 1.13 that existing
clients can use unmodified.
Added
- Protocol compatibility: every command, reply, error code and edge case
of the beanstalkd text protocol, checked byte for byte against the
reference server by differential tests and real clients (Python
greenstalk, Go go-beanstalk). The few intentional differences are listed
in docs/COMPAT.md. - Reference command line:
-l,-p,-z,-b,-f,-F,-s,
-V,-vwith the reference's defaults;--versionas an alias of-v.
-uis rejected: run the server as the desired user (for example with the
systemd unit inpackaging/systemd/). - Write-ahead log (
-b DIR,-f MS,-F,-s BYTES): jobs survive
restarts and crashes, and no reply is sent before its change reaches the
log. The on-disk format is not the reference's: a reference binlog
directory cannot be reused. - Graceful shutdown on SIGTERM / SIGINT (syncs the log; the reference
exits abruptly), and drain mode on SIGUSR1 as in the reference. - Configuration file (
--config FILE, TOML;--check-configvalidates
it): several listeners, binlog, logging, HTTP and cluster settings. See
docs/beanstalkd-rs.example.toml and
the ready-made files in packaging/examples/. - TLS and mutual TLS listeners, and an optional token authentication
extension (auth <token>, needs client support) on TLS listeners, with
limits on unauthenticated connections. - HTTP monitoring (off by default):
/healthz,/readyz,/metrics
(Prometheus) and/admin(read-only JSON). Log lines carry ANSI colors
only when stderr is a terminal. - Cluster mode (
[cluster]): 3 or 5 nodes replicate every job and
connection through Raft over mutual TLS, keep serving through the loss of
a minority of nodes, and look like one beanstalkd server to clients
connected to any node. Bootstrap with--cluster-init
(cluster.initial_voterschooses the first voters);[[cluster.peer]]
lists seeds and address overrides. A node with an empty data directory
rejoins against the current voters, one node at a time; a node whose id is
not a member yet waits until it is added. See
docs/DESIGN.md
§8 and docs/OPERATIONS.md. - Membership changes at runtime with the
beanstalkd-rs cluster
operator command (status,add,promote,remove,set-addr) over
the cluster port's authenticated admin channel (mTLS with thebstk-admin
certificate fromscripts/mkcluster-certs.sh DIR admin): grow from 1 to 3
or 3 to 5 nodes, shrink, replace a node or disk, remove the leader, change
an address, while the cluster serves. Guardrails: one voter added or
removed per change, only a caught-up learner is promoted, node ids are
never reused, fewer than 3 voters or a plaintext address off loopback only
when forced. A removed node stops by itself (exit status 11) once a
majority of the remaining voters confirm its removal; a node whose Raft
core stops on a fatal error exits with status 21 so that the service
manager restarts it. - Membership metrics on
/metricsand/admin(voters, learners,
members, joint state, learner lag, joining and rejoining phases); cluster
/readyzis 503 on a node that is isolated, not a member, or still
starting. - Operations guide
(docs/OPERATIONS.md):
install, configuration, persistence, security, cluster bootstrap, node
loss and rejoin, membership runbooks, CA rotation, backup and restore,
upgrades, monitoring and alerts, troubleshooting. - Performance: 1.2–1.4× the reference's throughput at 10 and 100
connections with 10–24% less CPU per operation, 2.2× with a binlog at 100
connections; a 3-node cluster serves about 316k operations per second
through the leader (tmpfs, Linux on an Apple M6). Worker threads are
tunable with--threads/server.threads. See
docs/BENCH.md. - Packaging: release archives for Linux (x86_64, aarch64; glibc 2.34
or newer, or fully static with musl) and macOS (aarch64) with SHA-256
checksums, a container image (Dockerfile), a hardened systemd unit
(RestartPreventExitStatus=10 11), example configurations
(packaging/)
andscripts/mkcluster-certs.shfor a cluster CA and node certificates.