instance method
determine_delay
Ruby on Rails edge
Since v5.1.7 Private — implementation detail, not part of the public APISignature
determine_delay(seconds_or_duration_or_algorithm:, executions:, error: nil, jitter: JITTER_DEFAULT)
No documentation comment.
Parameters
-
seconds_or_duration_or_algorithmkeyreq -
executionskeyreq -
errorkey = nil -
jitterkey = JITTER_DEFAULT
Source
# File activejob/lib/active_job/exceptions.rb, line 181
def determine_delay(seconds_or_duration_or_algorithm:, executions:, error: nil, jitter: JITTER_DEFAULT)
jitter = jitter == JITTER_DEFAULT ? self.class.retry_jitter : (jitter || 0.0)
case seconds_or_duration_or_algorithm
when :polynomially_longer
# This delay uses a polynomial backoff strategy, which was previously misnamed as exponential
delay = executions**4
delay_jitter = determine_jitter_for_delay(delay, jitter)
delay + delay_jitter + 2
when ActiveSupport::Duration, Integer, Float
delay = seconds_or_duration_or_algorithm.to_f
delay_jitter = determine_jitter_for_delay(delay, jitter)
delay + delay_jitter
when Proc
algorithm = seconds_or_duration_or_algorithm
algorithm.arity == 2 || algorithm.arity < -1 ? algorithm.call(executions, error) : algorithm.call(executions)
else
raise "Couldn't determine a delay based on #{seconds_or_duration_or_algorithm.inspect}"
end
end
Defined in activejob/lib/active_job/exceptions.rb line 181
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveJob::Exceptions