Module: Qless::Middleware::RetryExceptions

Defined in:
lib/qless/middleware/retry_exceptions.rb

Constant Summary collapse

NO_BACKOFF_STRATEGY =
lambda { |num| 0 }

Instance Method Summary collapse

Instance Method Details

#around_perform(job) ⇒ Object



4
5
6
7
8
9
10
11
# File 'lib/qless/middleware/retry_exceptions.rb', line 4

def around_perform(job)
  super
rescue *retryable_exception_classes => e
  raise if job.retries_left <= 0

  attempt_num = (job.original_retries - job.retries_left) + 1
  job.retry(backoff_strategy.call(attempt_num))
end

#backoff_strategyObject



27
28
29
# File 'lib/qless/middleware/retry_exceptions.rb', line 27

def backoff_strategy
  @backoff_strategy ||= NO_BACKOFF_STRATEGY
end

#exponential(base, options = {}) ⇒ Object



31
32
33
34
35
36
# File 'lib/qless/middleware/retry_exceptions.rb', line 31

def exponential(base, options = {})
  rand_fuzz = options.fetch(:rand_fuzz, 1)
  lambda do |num|
    base ** num + rand(rand_fuzz)
  end
end

#retry_on(*exception_classes) ⇒ Object



17
18
19
# File 'lib/qless/middleware/retry_exceptions.rb', line 17

def retry_on(*exception_classes)
  retryable_exception_classes.push(*exception_classes)
end

#retryable_exception_classesObject



13
14
15
# File 'lib/qless/middleware/retry_exceptions.rb', line 13

def retryable_exception_classes
  @retryable_exception_classes ||= []
end

#use_backoff_strategy(strategy = nil, &block) ⇒ Object



23
24
25
# File 'lib/qless/middleware/retry_exceptions.rb', line 23

def use_backoff_strategy(strategy = nil, &block)
  @backoff_strategy = strategy || block
end