Skip to content

Commit 3c3ac33

Browse files
committed
Fix instrumentation of error when deregistering process
This was sending two events per error instead of one.
1 parent 94ae87a commit 3c3ac33

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

app/models/solid_queue/process.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ def heartbeat
2525
end
2626

2727
def deregister(pruned: false)
28-
SolidQueue.instrument :deregister_process, process: self, pruned: pruned, claimed_size: claimed_executions.size do
28+
SolidQueue.instrument :deregister_process, process: self, pruned: pruned, claimed_size: claimed_executions.size do |payload|
2929
destroy!
30+
rescue Exception => error
31+
payload[:error] = error
32+
raise
3033
end
31-
rescue Exception => error
32-
SolidQueue.instrument :deregister_process, process: self, error: error
33-
raise
3434
end
3535
end

test/integration/instrumentation_test.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,26 @@ class InstrumentationTest < ActiveSupport::TestCase
8080
end
8181
end
8282

83+
test "errors when deregistering processes are included in deregister_process events" do
84+
SolidQueue::Process.any_instance.expects(:destroy!).raises(RuntimeError.new("everything is broken")).at_least_once
85+
Thread.report_on_exception = false
86+
87+
events = subscribed("deregister_process.solid_queue") do
88+
assert_raises RuntimeError do
89+
worker = SolidQueue::Worker.new.tap(&:start)
90+
wait_for_registered_processes(1, timeout: 1.second)
91+
92+
worker.stop
93+
wait_for_registered_processes(0, timeout: 1.second)
94+
end
95+
end
96+
97+
assert_equal 1, events.size
98+
assert events.first.last[:error].is_a?(RuntimeError)
99+
ensure
100+
Thread.report_on_exception = true
101+
end
102+
83103
test "retrying failed job emits retry event" do
84104
RaisingJob.perform_later(RuntimeError, "A")
85105
job = SolidQueue::Job.last

0 commit comments

Comments
 (0)