Suprnova v0.7.1
A defect-fix pass over 0.7.0's queue routing, from a full post-release review.
Fixed
-
Chained jobs no longer lose their declared queue.
ChainLinkcaptured a
job'smax_tries,timeout, andbackoffat chain-build time but not its
Job::queue(), so a job that landed on its declared queue when pushed
directly landed ondefaultwhen dispatched as part of a chain — the "job"
tier of the route → job → default resolution order silently vanished for
chains. The declared queue is now captured on the link and resolved exactly
like a direct push. Chain payloads written before this release decode
unchanged (serde(default)), and a link with no declared queue serializes
byte-identically to what 0.7.0 wrote. -
Failed-job records carry the queue the job died on. The worker's
dead-letter path hardcodedqueue = "default"into everyFailedJob
record, so failures of a routed job were invisible to an operator filtering
the failed store by the pool that owns them. The record now carries the
envelope's queue (defaultfor unrouted jobs). -
The 0.7.0 upgrade note understated the
jobsmigration. It read
"unfiltered workers are unaffected and need no migration", but
DatabaseQueueDriver::pushnames thequeuecolumn in itsINSERT
whether or not the job is routed — a 0.7.0 binary against an un-migrated
table fails every push, filtered or not. The 0.7.0 section below and
manual/queues.mdare corrected: on the database driver theALTER TABLE
is required for every deployment, and it must run before binaries roll
(older binaries list their columns explicitly, so migrating first is safe). -
README no longer advertises a
#[job]macro. No such macro exists —
jobs implement theJobtrait. The queues row now describes the real
surface, including 0.7.0's queue routing.
Changed
- The release path now bumps README version references.
bump-workspace-version.pyrewrites the README's pinned install tag, the
distribution-model example, and the MSRV line atomically with the
manifests, and a reworded README that stops matching a pattern fails the
release loudly. The README had advertised v0.6.0 since v0.7.0 shipped
because nothing in the release path touched it. - Connection routing is documented as name-resolution only.
Job::connection()and the connection field ofQueue::routeresolve the
connection name carried on theJobQueueing/JobQueuedlifecycle
events; a single process-global driver still receives every push, so they
do not select a different driver. The rustdoc andmanual/queues.md
previously implied driver selection that does not exist. The queue
dimension is unaffected — it is honored end to end. Per-connection drivers
remain future work. ChainLinkgained a publicqueue: Option<String>field, which breaks
struct-literal construction of chain links. Links built through
ChainLink::from_job— the normal path — are unaffected.
Upgrading
Coming from ≤ 0.6.x on the database queue driver, apply the 0.7.0 migration
below before rolling binaries; it is required for every deployment on
that driver, not just ones using --queue. 0.7.1 itself needs no migration.