bunqueue v2.8.20
blog · release
bunqueue v2.8.20
Fixes 1 bug. Queue.removeAsync() (which backs the BullMQ-style job.remove()) returned before the job was actually removed, on the embedded path (src/client/queue/operations/management.ts): the embedded branch fired…
To install bunqueue v2.8.20
Section titled “To install bunqueue v2.8.20”bun add bunqueue@2.8.20npm install bunqueue@2.8.20To upgrade bunqueue
Section titled “To upgrade bunqueue”bun add bunqueue@latestBugfixes
Section titled “Bugfixes”Queue.removeAsync()(which backs the BullMQ-stylejob.remove()) returned before the job was actually removed, on the embedded path (src/client/queue/operations/management.ts): the embedded branch firedgetSharedManager().cancel(id)as a floating promise andreturned immediately, while the TCP branch correctlyawaited itsCancelsend. Becausecancel()performs the removal inside an async write-lock (cancelJob→await withWriteLock(...)),await job.remove()could resolve before the job was gone (and any cancel error was swallowed as an unhandled rejection), inconsistent with the TCP path and a hazard under lock contention. The embedded path nowawaitscancel(). Surfaced by the new BiomenoFloatingPromiseslint (the old code was hidden behind a file-leveleslint-disable no-floating-promises). Deterministic repro via lock contention intest/repro-removeasync-floating-cancel.test.ts. The synchronousremove()remains intentionally fire-and-forget.
Thanks to 1 contributor!
Section titled “Thanks to 1 contributor!”← bunqueue v2.8.19 · Release on GitHub · Commits since v2.8.19 · Full changelog · All posts