From adeb8618603b7887368aaa9f2d6f893e608730ad Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Wed, 29 Oct 2025 12:29:06 -0400 Subject: [PATCH] Add wrap_in_app_executor in a few necessary places Process#register and #degister for the supervisor to start up properly. RecurringSchedule#reload_tasks resolves all the records immediately to avoid deferred resolution outside the executor block. Supervisor#handle_claimed_jobs_by wraps its code in the executor. A second attempt at #655 without causing the issues from #670 --- lib/solid_queue/processes/registrable.rb | 18 ++++++++++-------- .../scheduler/recurring_schedule.rb | 2 +- lib/solid_queue/supervisor.rb | 8 +++++--- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/lib/solid_queue/processes/registrable.rb b/lib/solid_queue/processes/registrable.rb index 2cc9036d..c7428010 100644 --- a/lib/solid_queue/processes/registrable.rb +++ b/lib/solid_queue/processes/registrable.rb @@ -18,17 +18,19 @@ def process_id attr_accessor :process def register - @process = SolidQueue::Process.register \ - kind: kind, - name: name, - pid: pid, - hostname: hostname, - supervisor: try(:supervisor), - metadata: metadata.compact + wrap_in_app_executor do + @process = SolidQueue::Process.register \ + kind: kind, + name: name, + pid: pid, + hostname: hostname, + supervisor: try(:supervisor), + metadata: metadata.compact + end end def deregister - process&.deregister + wrap_in_app_executor { process&.deregister } end def registered? diff --git a/lib/solid_queue/scheduler/recurring_schedule.rb b/lib/solid_queue/scheduler/recurring_schedule.rb index 4070a0ec..b765edf1 100644 --- a/lib/solid_queue/scheduler/recurring_schedule.rb +++ b/lib/solid_queue/scheduler/recurring_schedule.rb @@ -46,7 +46,7 @@ def persist_tasks end def reload_tasks - @configured_tasks = SolidQueue::RecurringTask.where(key: task_keys) + @configured_tasks = SolidQueue::RecurringTask.where(key: task_keys).to_a end def schedule(task) diff --git a/lib/solid_queue/supervisor.rb b/lib/solid_queue/supervisor.rb index 7d010593..ef9c79d6 100644 --- a/lib/solid_queue/supervisor.rb +++ b/lib/solid_queue/supervisor.rb @@ -176,9 +176,11 @@ def replace_fork(pid, status) # executions it had claimed as failed so that they can be retried # by some other worker. def handle_claimed_jobs_by(terminated_fork, status) - if registered_process = SolidQueue::Process.find_by(name: terminated_fork.name) - error = Processes::ProcessExitError.new(status) - registered_process.fail_all_claimed_executions_with(error) + wrap_in_app_executor do + if registered_process = SolidQueue::Process.find_by(name: terminated_fork.name) + error = Processes::ProcessExitError.new(status) + registered_process.fail_all_claimed_executions_with(error) + end end end