diff options
author | Eileen M. Uchitelle <eileencodes@users.noreply.github.com> | 2019-04-23 08:12:07 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-23 08:12:07 -0400 |
commit | 9f580232ad261e51d982420e07dacb1dea82edca (patch) | |
tree | 1fc8bcdbbb29965c3ab66e35345f23ccb170119b /activejob/lib | |
parent | 26bd26fa20da2b68eb93ef6204a0b0f06da19199 (diff) | |
parent | 5d9359bbc3e74f3d1433466174409411185ca49e (diff) | |
download | rails-9f580232ad261e51d982420e07dacb1dea82edca.tar.gz rails-9f580232ad261e51d982420e07dacb1dea82edca.tar.bz2 rails-9f580232ad261e51d982420e07dacb1dea82edca.zip |
Merge pull request #36057 from jhawthorn/activejob_retry_logic
Use ActiveJob 5.2 retry logic for old jobs
Diffstat (limited to 'activejob/lib')
-rw-r--r-- | activejob/lib/active_job/exceptions.rb | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/activejob/lib/active_job/exceptions.rb b/activejob/lib/active_job/exceptions.rb index 35c1476368..8e83246303 100644 --- a/activejob/lib/active_job/exceptions.rb +++ b/activejob/lib/active_job/exceptions.rb @@ -49,12 +49,10 @@ module ActiveJob # end 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 ||= {} - self.exception_executions[exceptions.to_s] = (exception_executions[exceptions.to_s] || 0) + 1 + executions = executions_for(exceptions) - if exception_executions[exceptions.to_s] < attempts - retry_job wait: determine_delay(seconds_or_duration_or_algorithm: wait, executions: exception_executions[exceptions.to_s]), queue: queue, priority: priority, error: error + if executions < attempts + retry_job wait: determine_delay(seconds_or_duration_or_algorithm: wait, executions: executions), queue: queue, priority: priority, error: error else if block_given? instrument :retry_stopped, error: error do @@ -146,5 +144,14 @@ module ActiveJob ActiveSupport::Notifications.instrument("#{name}.active_job", payload, &block) end + + def executions_for(exceptions) + if exception_executions + exception_executions[exceptions.to_s] = (exception_executions[exceptions.to_s] || 0) + 1 + else + # Guard against jobs that were persisted before we started having individual executions counters per retry_on + executions + end + end end end |