Skip to content

Commit 6458dbf

Browse files
committed
Add test
1 parent 9161da0 commit 6458dbf

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

test/unit/supervisor_test.rb

+30
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,36 @@ class SupervisorTest < ActiveSupport::TestCase
133133
end
134134
end
135135

136+
test "fail orphaned executions by releasing their concurrency locks" do
137+
result = JobResult.create!(queue_name: "default", status: "seq: ")
138+
4.times { |i| ThrottledUpdateResultJob.set(queue: :new_queue).perform_later(result) }
139+
process = SolidQueue::Process.register(kind: "Worker", pid: 42, name: "worker-123")
140+
141+
SolidQueue::ReadyExecution.claim("*", 5, process.id)
142+
143+
assert_equal 3, SolidQueue::ClaimedExecution.count
144+
assert_equal 0, SolidQueue::ReadyExecution.count
145+
assert_equal 1, SolidQueue::BlockedExecution.count
146+
147+
assert_equal [ process.id ], SolidQueue::ClaimedExecution.last(3).pluck(:process_id).uniq
148+
149+
# Simnulate orphaned executions by just wiping the claiming process
150+
process.delete
151+
152+
pid = run_supervisor_as_fork(workers: [ { queues: "background", polling_interval: 10, processes: 2 } ])
153+
wait_for_registered_processes(3)
154+
assert_registered_supervisor(pid)
155+
156+
terminate_process(pid)
157+
158+
skip_active_record_query_cache do
159+
assert_equal 0, SolidQueue::ClaimedExecution.count
160+
assert_equal 3, SolidQueue::FailedExecution.count
161+
assert_equal 0, SolidQueue::BlockedExecution.count
162+
assert_equal 1, SolidQueue::ReadyExecution.count
163+
end
164+
end
165+
136166
test "prune processes with expired heartbeats" do
137167
pruned = SolidQueue::Process.register(kind: "Worker", pid: 42, name: "worker-42")
138168

0 commit comments

Comments
 (0)