Skip to content

Commit c6632ee

Browse files
committed
Fix undefined variable when replacing a failed thread
And fix also the async supervisor tests, that were failing due to not taking the scheduler into account.
1 parent 1f66183 commit c6632ee

File tree

2 files changed

+14
-15
lines changed

2 files changed

+14
-15
lines changed

lib/solid_queue/async_supervisor.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ def replace_thread(thread_id, instance)
2626
SolidQueue.instrument(:replace_thread, supervisor_pid: ::Process.pid) do |payload|
2727
payload[:thread] = instance
2828

29-
error = Processes::ThreadTerminatedError.new(terminated_instance.name)
30-
release_claimed_jobs_by(terminated_instance, with_error: error)
29+
error = Processes::ThreadTerminatedError.new(instance.name)
30+
release_claimed_jobs_by(instance, with_error: error)
3131

3232
start_process(configured_processes.delete(thread_id))
3333
end

test/unit/async_supervisor_test.rb

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,19 @@ class AsyncSupervisorTest < ActiveSupport::TestCase
55

66
test "start as non-standalone" do
77
supervisor = run_supervisor_as_thread
8-
wait_for_registered_processes(4, timeout: 10.seconds)
8+
wait_for_registered_processes(4, timeout: 3.seconds) # supervisor + dispatcher + 2 workers
99

1010
assert_registered_processes(kind: "Supervisor(async)")
1111
assert_registered_processes(kind: "Worker", supervisor_id: supervisor.process_id, count: 2)
1212
assert_registered_processes(kind: "Dispatcher", supervisor_id: supervisor.process_id)
13-
13+
ensure
1414
supervisor.stop
15-
1615
assert_no_registered_processes
1716
end
1817

1918
test "start standalone" do
2019
pid = run_supervisor_as_fork(mode: :async)
21-
wait_for_registered_processes(4, timeout: 10.seconds)
20+
wait_for_registered_processes(4, timeout: 5.seconds) # supervisor + dispatcher + 2 workers
2221

2322
assert_registered_processes(kind: "Supervisor(async)")
2423
assert_registered_processes(kind: "Worker", supervisor_pid: pid, count: 2)
@@ -29,15 +28,15 @@ class AsyncSupervisorTest < ActiveSupport::TestCase
2928
end
3029

3130
test "start as non-standalone with provided configuration" do
32-
supervisor = run_supervisor_as_thread(workers: [], dispatchers: [ { batch_size: 100 } ])
33-
wait_for_registered_processes(2, timeout: 10.seconds) # supervisor + dispatcher
31+
supervisor = run_supervisor_as_thread(workers: [], dispatchers: [ { batch_size: 100 } ], skip_recurring: false)
32+
wait_for_registered_processes(2, timeout: 3.seconds) # supervisor + dispatcher
3433

3534
assert_registered_processes(kind: "Supervisor(async)")
3635
assert_registered_processes(kind: "Worker", count: 0)
3736
assert_registered_processes(kind: "Dispatcher", supervisor_id: supervisor.process_id)
38-
37+
assert_registered_processes(kind: "Scheduler", supervisor_id: supervisor.process_id)
38+
ensure
3939
supervisor.stop
40-
4140
assert_no_registered_processes
4241
end
4342

@@ -50,17 +49,17 @@ class AsyncSupervisorTest < ActiveSupport::TestCase
5049
}
5150

5251
supervisor = run_supervisor_as_thread(**config)
53-
wait_for_registered_processes(2, timeout: 10.seconds) # supervisor + 1 worker
52+
wait_for_registered_processes(2, timeout: 3.seconds) # supervisor + 1 worker
5453
assert_registered_processes(kind: "Supervisor(async)")
5554

5655
wait_while_with_timeout(1.second) { SolidQueue::ClaimedExecution.count > 0 }
5756

58-
supervisor.stop
59-
6057
skip_active_record_query_cache do
6158
assert_equal 0, SolidQueue::ClaimedExecution.count
6259
assert_equal 3, SolidQueue::FailedExecution.count
6360
end
61+
ensure
62+
supervisor.stop
6463
end
6564

6665
test "failed orphaned executions as standalone" do
@@ -72,7 +71,7 @@ class AsyncSupervisorTest < ActiveSupport::TestCase
7271
}
7372

7473
pid = run_supervisor_as_fork(mode: :async, **config)
75-
wait_for_registered_processes(2, timeout: 10.seconds) # supervisor + 1 worker
74+
wait_for_registered_processes(2, timeout: 3.seconds) # supervisor + 1 worker
7675
assert_registered_processes(kind: "Supervisor(async)")
7776

7877
wait_while_with_timeout(1.second) { SolidQueue::ClaimedExecution.count > 0 }
@@ -87,7 +86,7 @@ class AsyncSupervisorTest < ActiveSupport::TestCase
8786

8887
private
8988
def run_supervisor_as_thread(**options)
90-
SolidQueue::Supervisor.start(mode: :async, standalone: false, **options)
89+
SolidQueue::Supervisor.start(mode: :async, standalone: false, **options.with_defaults(skip_recurring: true))
9190
end
9291

9392
def simulate_orphaned_executions(count)

0 commit comments

Comments
 (0)