The Wire · Showcase
Solid Queue workers now die on finalization failure to free stuck claims
By RepoJournal · Filed · About Rails
Solid Queue just shipped a fix that stops claimed executions from hanging forever after transient database errors, by killing the owning worker.
Solid Queue's new behavior [1] wraps finalization failures into a dedicated error and stops the owning worker so shutdown releases the claim for retry. This directly fixes a class of stuck jobs that could previously linger after transient DB errors, and the fix is paired with a scope-tightening follow-up [2] that avoids the redundant still-claimed check on every ordinary failure. As the PR summary puts it, "Prevent claimed executions from remaining stuck after transient database errors by terminating the owning worker so shutdown releases the claim." [3] Meanwhile, Rails itself is mostly quiet: a small MySQL reader fix [4] ensures `indexes([])` returns early instead of opening a connection to read nothing, and two documentation corrections [5][6] tidy up the Store dirty tracking example and the AVG return type. Ryuta Kamizono also merged a separate PR that backs the MySQL `fetch_indexes` change, all part of a light 6-commit, 4-PR day across the stack.
One email a day. Unsubscribe in one click.
Keep up with Rails in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Upgrade solid_queue to the latest commit containing PR #768 before next deploy rails/solid_queue [immediate]
- → Review your workers for stuck claimed executions after DB blips rails/solid_queue [plan]
- → Monitor the Rails MySQL fix for empty-list index reads rails/rails [monitor]
References
- [1] Stop workers when job finalization fails ↗ rails/solid_queue
- [2] Scope the finalization guard and restore perform's shape rails/solid_queue
- [3] Stop workers when job finalization fails rails/solid_queue
- [4] Don't touch the connection in MySQL's `fetch_indexes` for an empty list ↗ rails/rails
- [5] Merge pull request #58539 from 55728/fix-store-dirty-tracking-doc-example rails/rails
- [6] Merge pull request #58538 from 55728/fix-calculations-avg-doc-return-type rails/rails