From acbbd4ab8d3c51ca464a97245c4d7709259472f9 Mon Sep 17 00:00:00 2001 From: Rosa Gutierrez Date: Mon, 7 Jan 2019 17:18:17 +0100 Subject: Ensure 0 is always the default for the individual exception counters in ActiveJob Some adapters like Resque that use Redis, convert the Ruby hash with a default value, Hash.new(0), into a regular hash without a default value after serializing, storing and deserializing. This raises an error when we try to access a missing exception key. A simple solution is not to rely on the hash's default value, and provide a default as alternative when accessing it instead. --- activejob/lib/active_job/core.rb | 2 +- activejob/lib/active_job/exceptions.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'activejob') diff --git a/activejob/lib/active_job/core.rb b/activejob/lib/active_job/core.rb index 4ab62f89b0..487cdd6d38 100644 --- a/activejob/lib/active_job/core.rb +++ b/activejob/lib/active_job/core.rb @@ -81,7 +81,7 @@ module ActiveJob @queue_name = self.class.queue_name @priority = self.class.priority @executions = 0 - @exception_executions = Hash.new(0) + @exception_executions = {} end # Returns a hash with the job data that can safely be passed to the diff --git a/activejob/lib/active_job/exceptions.rb b/activejob/lib/active_job/exceptions.rb index 48b35c8d05..9e00942a1c 100644 --- a/activejob/lib/active_job/exceptions.rb +++ b/activejob/lib/active_job/exceptions.rb @@ -50,8 +50,8 @@ module ActiveJob def retry_on(*exceptions, wait: 3.seconds, attempts: 5, queue: nil, priority: nil) rescue_from(*exceptions) do |error| # Guard against jobs that were persisted before we started having individual executions counters per retry_on - self.exception_executions ||= Hash.new(0) - self.exception_executions[exceptions.to_s] += 1 + self.exception_executions ||= {} + self.exception_executions[exceptions.to_s] = (exception_executions[exceptions.to_s] || 0) + 1 if exception_executions[exceptions.to_s] < attempts retry_job wait: determine_delay(wait), queue: queue, priority: priority, error: error -- cgit v1.2.3