Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions sentry-rails/lib/sentry/rails/active_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ def detach_event_handlers
# This handler does not capture error unless `active_job_report_on_retry_error` is true
def retry_handler(*args)
handle_error_event(*args) do |job, error|
return if error.nil?
return if !Sentry.initialized? || job.already_supported_by_sentry_integration?
return unless Sentry.configuration.rails.active_job_report_on_retry_error

Expand Down
69 changes: 69 additions & 0 deletions sentry-rails/spec/active_job/continuable_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# frozen_string_literal: true

require "spec_helper"

if RAILS_VERSION >= 8.1
require "active_job/continuation/test_helper"

RSpec.describe "Sentry + ActiveJob::Continuable", type: :job do
include_context "active_job backend harness", adapter: :test
include_context "test adapter"
include ActiveJob::Continuation::TestHelper

let(:configure_sentry) do
proc { |config| config.rails.active_job_report_on_retry_error = true }
end

let(:performed_steps) { [] }

def error_events
sentry_events.reject { |event| event.is_a?(Sentry::TransactionEvent) }
end

it "resumes an interrupted job and finishes it" do
steps = performed_steps
job = job_fixture do
include ActiveJob::Continuable

define_method(:perform) do
step(:first) { steps << :first }
step(:second) { steps << :second }
end
end

job.perform_later

expect do
interrupt_job_after_step(job, :first) { perform_enqueued_jobs }
drain
end.not_to raise_error

expect(performed_steps).to eq([:first, :second])
expect(error_events).to be_empty
end

it "resumes a job that failed after making progress and finishes it" do
steps = performed_steps
failures = ["step two failed once"]
job = job_fixture do
include ActiveJob::Continuable

define_method(:perform) do
step(:first) { steps << :first }
step(:second) do
failure = failures.shift
raise failure if failure

steps << :second
end
end
end

job.perform_later

expect { drain }.not_to raise_error

expect(performed_steps).to eq([:first, :second])
end
end
end
Loading