diff options
Diffstat (limited to 'activejob/lib')
-rw-r--r-- | activejob/lib/active_job/arguments.rb | 2 | ||||
-rw-r--r-- | activejob/lib/active_job/exceptions.rb | 28 | ||||
-rw-r--r-- | activejob/lib/active_job/logging.rb | 2 | ||||
-rw-r--r-- | activejob/lib/active_job/test_helper.rb | 25 |
4 files changed, 35 insertions, 22 deletions
diff --git a/activejob/lib/active_job/arguments.rb b/activejob/lib/active_job/arguments.rb index ba7f9456f9..b344c44aef 100644 --- a/activejob/lib/active_job/arguments.rb +++ b/activejob/lib/active_job/arguments.rb @@ -34,7 +34,7 @@ module ActiveJob arguments.map { |argument| serialize_argument(argument) } end - # Deserializes a set of arguments. Instrinsic types that can safely be + # Deserializes a set of arguments. Intrinsic types that can safely be # deserialized without mutation are returned as-is. Arrays/Hashes are # deserialized element by element. All other types are deserialized using # GlobalID. diff --git a/activejob/lib/active_job/exceptions.rb b/activejob/lib/active_job/exceptions.rb index d8384c81b6..bb25afbca6 100644 --- a/activejob/lib/active_job/exceptions.rb +++ b/activejob/lib/active_job/exceptions.rb @@ -46,18 +46,15 @@ module ActiveJob # end def retry_on(*exceptions, wait: 3.seconds, attempts: 5, queue: nil, priority: nil) rescue_from(*exceptions) do |error| - payload = { - job: self, - adapter: self.class.queue_adapter, - error: error, - wait: wait - } - if executions < attempts - ActiveSupport::Notifications.instrument("enqueue_retry.active_job", payload) do - retry_job wait: determine_delay(wait), queue: queue, priority: priority - end + retry_job wait: determine_delay(wait), queue: queue, priority: priority, error: error else + payload = { + job: self, + adapter: self.class.queue_adapter, + error: error + } + if block_given? ActiveSupport::Notifications.instrument("retry_stopped.active_job", payload) do yield self, error @@ -127,7 +124,16 @@ module ActiveJob # end # end def retry_job(options = {}) - enqueue options + payload = { + job: self, + adapter: self.class.queue_adapter, + error: options[:error], + wait: options[:wait] + } + + ActiveSupport::Notifications.instrument("enqueue_retry.active_job", payload) do + enqueue options + end end private diff --git a/activejob/lib/active_job/logging.rb b/activejob/lib/active_job/logging.rb index 96a3e6bf48..0abee4ed98 100644 --- a/activejob/lib/active_job/logging.rb +++ b/activejob/lib/active_job/logging.rb @@ -94,7 +94,7 @@ module ActiveJob wait = event.payload[:wait] error do - "Retrying #{job.class} in #{wait} seconds, due to a #{ex.class}. The original exception was #{ex.cause.inspect}." + "Retrying #{job.class} in #{wait.inspect} seconds, due to a #{ex&.class.inspect}. The original exception was #{ex&.cause.inspect}." end end diff --git a/activejob/lib/active_job/test_helper.rb b/activejob/lib/active_job/test_helper.rb index bb9e3e6ca4..9efc8c0c12 100644 --- a/activejob/lib/active_job/test_helper.rb +++ b/activejob/lib/active_job/test_helper.rb @@ -345,7 +345,7 @@ module ActiveJob # end def assert_enqueued_with(job: nil, args: nil, at: nil, queue: nil) expected = { job: job, args: args, at: at, queue: queue }.compact - serialized_args = serialize_args_for_assertion(expected) + expected_args = prepare_args_for_assertion(expected) if block_given? original_enqueued_jobs_count = enqueued_jobs.count @@ -358,7 +358,8 @@ module ActiveJob end matching_job = jobs.find do |enqueued_job| - serialized_args.all? { |key, value| value == enqueued_job[key] } + deserialized_job = deserialize_args_for_assertion(enqueued_job) + expected_args.all? { |key, value| value == deserialized_job[key] } end assert matching_job, "No enqueued job found with #{expected}" @@ -396,7 +397,7 @@ module ActiveJob # end def assert_performed_with(job: nil, args: nil, at: nil, queue: nil, &block) expected = { job: job, args: args, at: at, queue: queue }.compact - serialized_args = serialize_args_for_assertion(expected) + expected_args = prepare_args_for_assertion(expected) if block_given? original_performed_jobs_count = performed_jobs.count @@ -408,8 +409,9 @@ module ActiveJob jobs = performed_jobs end - matching_job = jobs.find do |performed_job| - serialized_args.all? { |key, value| value == performed_job[key] } + matching_job = jobs.find do |enqueued_job| + deserialized_job = deserialize_args_for_assertion(enqueued_job) + expected_args.all? { |key, value| value == deserialized_job[key] } end assert matching_job, "No performed job found with #{expected}" @@ -552,10 +554,15 @@ module ActiveJob end end - def serialize_args_for_assertion(args) - args.dup.tap do |serialized_args| - serialized_args[:args] = ActiveJob::Arguments.serialize(serialized_args[:args]) if serialized_args[:args] - serialized_args[:at] = serialized_args[:at].to_f if serialized_args[:at] + def prepare_args_for_assertion(args) + args.dup.tap do |arguments| + arguments[:at] = arguments[:at].to_f if arguments[:at] + end + end + + def deserialize_args_for_assertion(job) + job.dup.tap do |new_job| + new_job[:args] = ActiveJob::Arguments.deserialize(new_job[:args]) if new_job[:args] end end |