Skip to content

Commit 0799944

Browse files
committed
Extract termination instrumentation to Supervisor
1 parent 9b49ce0 commit 0799944

File tree

5 files changed

+20
-8
lines changed

5 files changed

+20
-8
lines changed

lib/solid_queue/supervisor.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ def start_process(configured_process)
6363
raise NotImplementedError
6464
end
6565

66+
def instrument_termination(type, &block)
67+
SolidQueue.instrument("#{type}_termination".to_sym, process_id: process_id, supervisor_pid: ::Process.pid, &block)
68+
end
69+
6670
def shutdown
6771
SolidQueue.instrument(:shutdown_process, process: self) do
6872
run_callbacks(:shutdown) do

lib/solid_queue/supervisor/async_supervisor.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ def stop_threads
6262
end
6363

6464
def terminate_gracefully
65-
SolidQueue.instrument(:graceful_termination, process_id: process_id, supervisor_pid: ::Process.pid, supervised_processes: threads.keys) do |payload|
65+
instrument_termination(:graceful) do |payload|
66+
payload[:supervised_processes] = threads.keys
67+
6668
unless all_threads_terminated?
6769
payload[:shutdown_timeout_exceeded] = true
6870
terminate_immediately
@@ -71,7 +73,9 @@ def terminate_gracefully
7173
end
7274

7375
def terminate_immediately
74-
SolidQueue.instrument(:immediate_termination, process_id: process_id, supervisor_pid: ::Process.pid, supervised_processes: threads.keys) do
76+
instrument_termination(:immediate) do |payload|
77+
payload[:supervised_processes] = threads.keys
78+
7579
exit!
7680
end
7781
end

lib/solid_queue/supervisor/fork_supervisor.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ def start_process(configured_process)
4747
end
4848

4949
def terminate_gracefully
50-
SolidQueue.instrument(:graceful_termination, process_id: process_id, supervisor_pid: ::Process.pid, supervised_processes: forks.keys) do |payload|
50+
instrument_termination(:graceful) do |payload|
51+
payload[:supervised_processes] = forks.keys
52+
5153
term_forks
5254

5355
Timer.wait_until(SolidQueue.shutdown_timeout, -> { all_forks_terminated? }) do
@@ -62,7 +64,9 @@ def terminate_gracefully
6264
end
6365

6466
def terminate_immediately
65-
SolidQueue.instrument(:immediate_termination, process_id: process_id, supervisor_pid: ::Process.pid, supervised_processes: forks.keys) do
67+
instrument_termination(:immediate) do |payload|
68+
payload[:supervised_processes] = forks.keys
69+
6670
quit_forks
6771
end
6872
end

test/integration/async_processes_lifecycle_test.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ class AsyncProcessesLifecycleTest < ActiveSupport::TestCase
3333

3434
test "kill supervisor while there are jobs in-flight" do
3535
no_pause = enqueue_store_result_job("no pause")
36-
pause = enqueue_store_result_job("pause", pause: 0.2.seconds)
36+
pause = enqueue_store_result_job("pause", pause: 1.second)
3737

38-
signal_process(@pid, :KILL, wait: 0.15.seconds)
38+
signal_process(@pid, :KILL, wait: 0.2.seconds)
3939
wait_for_jobs_to_finish_for(2.seconds)
4040
wait_for_registered_processes(1, timeout: 3.second)
4141

test/integration/forked_processes_lifecycle_test.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ class ForkedProcessesLifecycleTest < ActiveSupport::TestCase
3333

3434
test "kill supervisor while there are jobs in-flight" do
3535
no_pause = enqueue_store_result_job("no pause")
36-
pause = enqueue_store_result_job("pause", pause: 0.2.seconds)
36+
pause = enqueue_store_result_job("pause", pause: 1.second)
3737

38-
signal_process(@pid, :KILL, wait: 0.15.seconds)
38+
signal_process(@pid, :KILL, wait: 0.2.seconds)
3939
wait_for_jobs_to_finish_for(2.seconds)
4040
wait_for_registered_processes(1, timeout: 3.second)
4141

0 commit comments

Comments
 (0)