Skip to content

Honour TERM received during supervisor boot before forking workers - #770

Open
rafael-pissardo wants to merge 1 commit into
rails:mainfrom
rafael-pissardo:fix/755-term-during-supervisor-boot
Open

Honour TERM received during supervisor boot before forking workers#770
rafael-pissardo wants to merge 1 commit into
rails:mainfrom
rafael-pissardo:fix/755-term-during-supervisor-boot

Conversation

@rafael-pissardo

@rafael-pissardo rafael-pissardo commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Drain the supervisor signal queue before each child is forked, and shut down immediately when a stop signal was already queued during boot/start hooks
  • Re-arm TERM/INT/QUIT handlers as the first thing in forked children so a forwarded TERM is not handled by the inherited enqueue-only supervisor trap
  • Add a regression test that sends TERM while an on_start hook is still running and asserts workers never start or claim jobs

Fixes #755.

Test plan

  • TARGET_DB=sqlite bundle exec ruby -Itest test/integration/supervisor_boot_signal_test.rb
  • TARGET_DB=sqlite bundle exec ruby -Itest test/integration/forked_processes_lifecycle_test.rb
  • TARGET_DB=sqlite bundle exec ruby -Itest test/integration/lifecycle_hooks_test.rb
  • TARGET_DB=sqlite bundle exec ruby -Itest test/unit/fork_supervisor_test.rb
  • RuboCop on changed files

Signals queued while start hooks run were only drained in the supervise
loop, after children had already been forked. Those children still held
the inherited enqueue-only trap, so a forwarded TERM was dropped and
workers kept claiming jobs until SIGKILL. Drain the queue before each
fork, skip supervise when already stopped, and re-arm child handlers
immediately after fork.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Forked worker misses forwarded TERM, keeps claiming jobs until SIGKILL

1 participant