Skip to content

Commit 7fcae9a

Browse files
committed
Replace manual logging for thread error with instrumentation
1 parent 3c3ac33 commit 7fcae9a

File tree

3 files changed

+28
-6
lines changed

3 files changed

+28
-6
lines changed

lib/solid_queue/app_executor.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def wrap_in_app_executor(&block)
1111
end
1212

1313
def handle_thread_error(error)
14-
SolidQueue.logger.error("[SolidQueue] #{error}")
14+
SolidQueue.instrument(:thread_error, error: error)
1515

1616
if SolidQueue.on_thread_error
1717
SolidQueue.on_thread_error.call(error)

test/integration/instrumentation_test.rb

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,9 @@ class InstrumentationTest < ActiveSupport::TestCase
8181
end
8282

8383
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
84+
previous_thread_report_on_exception, Thread.report_on_exception = Thread.report_on_exception, false
85+
error = RuntimeError.new("everything is broken")
86+
SolidQueue::Process.any_instance.expects(:destroy!).raises(error).at_least_once
8687

8788
events = subscribed("deregister_process.solid_queue") do
8889
assert_raises RuntimeError do
@@ -95,9 +96,9 @@ class InstrumentationTest < ActiveSupport::TestCase
9596
end
9697

9798
assert_equal 1, events.size
98-
assert events.first.last[:error].is_a?(RuntimeError)
99+
assert_event events.first, "deregister_process", error: error
99100
ensure
100-
Thread.report_on_exception = true
101+
Thread.report_on_exception = previous_thread_report_on_exception
101102
end
102103

103104
test "retrying failed job emits retry event" do
@@ -260,6 +261,27 @@ class InstrumentationTest < ActiveSupport::TestCase
260261
end
261262
end
262263

264+
test "thread errors emit thread_error events" do
265+
previous_thread_report_on_exception, Thread.report_on_exception = Thread.report_on_exception, false
266+
267+
error = RuntimeError.new("everything is broken")
268+
SolidQueue::ClaimedExecution::Result.expects(:new).raises(error).at_least_once
269+
270+
AddToBufferJob.perform_later "hey!"
271+
272+
events = subscribed("thread_error.solid_queue") do
273+
SolidQueue::Worker.new.tap do |worker|
274+
worker.mode = :inline
275+
worker.start
276+
end
277+
end
278+
279+
assert_equal 1, events.count
280+
assert_event events.first, "thread_error", error: error
281+
ensure
282+
Thread.report_on_exception = previous_thread_report_on_exception
283+
end
284+
263285
private
264286
def subscribed(name, &block)
265287
[].tap do |events|

test/integration/processes_lifecycle_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ def assert_registered_supervisor
211211
end
212212

213213
def assert_no_registered_workers
214-
assert_empty find_processes_registered_as("Worker")
214+
assert_empty find_processes_registered_as("Worker").to_a
215215
end
216216

217217
def enqueue_store_result_job(value, queue_name = :background, count = 1, **options)

0 commit comments

Comments
 (0)