File tree Expand file tree Collapse file tree 3 files changed +31
-9
lines changed Expand file tree Collapse file tree 3 files changed +31
-9
lines changed Original file line number Diff line number Diff line change @@ -87,6 +87,7 @@ def failed_with(error)
8787 job . failed_with ( error )
8888 destroy!
8989 end
90+ raise error
9091 end
9192
9293 private
Original file line number Diff line number Diff line change @@ -19,14 +19,16 @@ def post(execution)
1919 available_threads . decrement
2020
2121 future = Concurrent ::Future . new ( args : [ execution ] , executor : executor ) do |thread_execution |
22- thread_execution . perform
23- ensure
24- available_threads . increment
25- mutex . synchronize { on_idle . try ( :call ) if idle? }
26- end
27-
28- future . add_observer do |_ , _ , error |
29- handle_thread_error ( error ) if error
22+ begin
23+ wrap_in_app_executor do
24+ thread_execution . perform
25+ end
26+ rescue Exception
27+ nil
28+ ensure
29+ available_threads . increment
30+ mutex . synchronize { on_idle . try ( :call ) if idle? }
31+ end
3032 end
3133
3234 future . execute
Original file line number Diff line number Diff line change @@ -51,6 +51,26 @@ class WorkerTest < ActiveSupport::TestCase
5151 subscriber = ErrorBuffer . new
5252 Rails . error . subscribe ( subscriber )
5353
54+ SolidQueue ::ClaimedExecution ::Result . expects ( :new ) . raises ( RuntimeError . new ( "everything is broken" ) ) . at_least_once
55+
56+ AddToBufferJob . perform_later "hey!"
57+
58+ @worker . start
59+
60+ wait_for_jobs_to_finish_for ( 1 . second )
61+ @worker . wake_up
62+
63+ assert_equal 1 , subscriber . errors . count
64+ assert_equal "everything is broken" , subscriber . messages . first
65+ ensure
66+ Rails . error . unsubscribe ( subscriber ) if Rails . error . respond_to? ( :unsubscribe )
67+ SolidQueue . on_thread_error = original_on_thread_error
68+ end
69+
70+ test "errors on claimed executions are reported via Rails error subscriber" do
71+ subscriber = ErrorBuffer . new
72+ Rails . error . subscribe ( subscriber )
73+
5474 RaisingJob . perform_later ( RuntimeError , "B" )
5575
5676 @worker . start
@@ -62,7 +82,6 @@ class WorkerTest < ActiveSupport::TestCase
6282 assert_equal "This is a RuntimeError exception" , subscriber . messages . first
6383 ensure
6484 Rails . error . unsubscribe ( subscriber ) if Rails . error . respond_to? ( :unsubscribe )
65- SolidQueue . on_thread_error = original_on_thread_error
6685 end
6786
6887 test "claim and process more enqueued jobs than the pool size allows to process at once" do
You can’t perform that action at this time.
0 commit comments