Class: JobWorkflow::TaskRetry
- Inherits:
-
Object
- Object
- JobWorkflow::TaskRetry
- Defined in:
- lib/job_workflow/task_retry.rb,
sig/generated/job_workflow/task_retry.rbs
Instance Attribute Summary collapse
- #base_delay ⇒ Integer readonly
- #count ⇒ Integer readonly
- #jitter ⇒ Boolean readonly
- #strategy ⇒ Symbol readonly
Class Method Summary collapse
-
.from_primitive_value(value) ⇒ TaskRetry
: (Integer | Hash[Symbol, untyped]) -> TaskRetry.
Instance Method Summary collapse
-
#apply_jitter(delay) ⇒ Float
: (Integer) -> Float.
-
#calculate_base_delay(retry_attempt) ⇒ Integer
: (Integer) -> Integer.
-
#delay_for(retry_attempt) ⇒ Float
: (Integer) -> Float.
-
#initialize(count: 0, strategy: :exponential, base_delay: 1, jitter: false) ⇒ TaskRetry
constructor
: (?count: Integer, ?strategy: Symbol, ?base_delay: Integer, ?jitter: bool) -> void.
Constructor Details
#initialize(count: 0, strategy: :exponential, base_delay: 1, jitter: false) ⇒ TaskRetry
: (?count: Integer, ?strategy: Symbol, ?base_delay: Integer, ?jitter: bool) -> void
30 31 32 33 34 35 |
# File 'lib/job_workflow/task_retry.rb', line 30 def initialize(count: 0, strategy: :exponential, base_delay: 1, jitter: false) @count = count @strategy = strategy @base_delay = base_delay @jitter = jitter end |
Instance Attribute Details
#base_delay ⇒ Integer (readonly)
7 8 9 |
# File 'lib/job_workflow/task_retry.rb', line 7 def base_delay @base_delay end |
#count ⇒ Integer (readonly)
5 6 7 |
# File 'lib/job_workflow/task_retry.rb', line 5 def count @count end |
#jitter ⇒ Boolean (readonly)
8 9 10 |
# File 'lib/job_workflow/task_retry.rb', line 8 def jitter @jitter end |
#strategy ⇒ Symbol (readonly)
6 7 8 |
# File 'lib/job_workflow/task_retry.rb', line 6 def strategy @strategy end |
Class Method Details
.from_primitive_value(value) ⇒ TaskRetry
: (Integer | Hash[Symbol, untyped]) -> TaskRetry
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/job_workflow/task_retry.rb', line 12 def from_primitive_value(value) case value when Integer new(count: value) when Hash new( count: value.fetch(:count, 3), strategy: value.fetch(:strategy, :exponential), base_delay: value.fetch(:base_delay, 1), jitter: value.fetch(:jitter, false) ) else raise ArgumentError, "retry must be Integer or Hash" end end |
Instance Method Details
#apply_jitter(delay) ⇒ Float
: (Integer) -> Float
57 58 59 60 61 62 |
# File 'lib/job_workflow/task_retry.rb', line 57 def apply_jitter(delay) return delay.to_f unless jitter randomness = delay * 0.5 delay + (rand * randomness) - (randomness / 2) end |
#calculate_base_delay(retry_attempt) ⇒ Integer
: (Integer) -> Integer
46 47 48 49 50 51 52 53 54 |
# File 'lib/job_workflow/task_retry.rb', line 46 def calculate_base_delay(retry_attempt) case strategy when :exponential exponent = retry_attempt - 1 #: Integer base_delay * (1 << exponent) else base_delay end end |
#delay_for(retry_attempt) ⇒ Float
: (Integer) -> Float
38 39 40 41 |
# File 'lib/job_workflow/task_retry.rb', line 38 def delay_for(retry_attempt) delay = calculate_base_delay(retry_attempt) apply_jitter(delay) end |