Class: Tenax::Retry::Backoff::Linear

Inherits:
Strategy
  • Object
show all
Defined in:
lib/tenax/retry/backoff/linear.rb

Overview

Linear backoff: delay grows in proportion to attempt number.

delay = base * attempt (capped at cap if provided)

Useful when you want some growth between attempts but not the aggressive doubling of exponential backoff.

Examples:

backoff = Tenax::Retry::Backoff::Linear.new(base: 0.5, cap: 5.0)
backoff.delay_for(1) # => 0.5
backoff.delay_for(2) # => 1.0
backoff.delay_for(3) # => 1.5
backoff.delay_for(20) # => 5.0   (capped)

Instance Method Summary collapse

Constructor Details

#initialize(base:, cap: nil) ⇒ Linear

Returns a new instance of Linear.

Parameters:

  • base (Numeric) —

    seconds; the unit increment per attempt

  • cap (Numeric, nil) (defaults to: nil) —

    maximum delay in seconds, or nil for uncapped

Raises:

  • (ArgumentError) —

    if base is negative or cap is negative



25
26
27
28
29
30
31
32
33
# File 'lib/tenax/retry/backoff/linear.rb', line 25

def initialize(base:, cap: nil)
  raise ArgumentError, "base must be non-negative, got #{base}" if base.negative?
  raise ArgumentError, "cap must be non-negative, got #{cap}" if cap&.negative?

  super()
  @base = base.to_f
  @cap  = cap&.to_f
  freeze
end

Instance Method Details

#delay_for(attempt) ⇒ Float

Returns delay seconds.

Parameters:

  • attempt (Integer) —

    1-based attempt number

Returns:

  • (Float) —

    delay seconds



37
38
39
40
# File 'lib/tenax/retry/backoff/linear.rb', line 37

def delay_for(attempt)
  delay = @base * attempt
  @cap ? [delay, @cap].min : delay
end