Sidekiq Glass

Build Status Code Climate

Sidekiq worker wrapper that provides optional timeout and after failure (reentrancy).

Reentrancy

If you don't know what is reentrancy, you can read about it here.

Setup

When creating a worker that inherits from SidekiqGlass::Worker, the perform_async method provided by Sidekiq is overriden in order to provide flexibility in the max number of params a background job can be created with and in the time a background job can take to finish. For this, the following methods can be defined:

Method Arguments Description
self.timeout= Integer Set the number of seconds that a job can take to finish (if not defined, Sidekiq timeout will be applied)
execute any_args Required method that will be invoked when calling Worker::perform_async
after_failure any_args Optional method that will be invoked if the execute method fails

Usage

Once you've set the gem, you can start using the SidekiqGlass::Worker as following:

class Worker1 < SidekiqGlass::Worker
  self.timeout = 3600 # job can run for 1 hour max

  def execute(*ids)
    SomeService.new.process(ids)
  end

  def after_failure(*ids)
    SomeService.new.expire!(ids)
  end
end

Worker1.perform_async('id1', 'id2', 'id3')
class Worker2 < SidekiqGlass::Worker
  def execute(first_param, second_param, third_param)
    SomeService.new.process(first_param, second_param, third_param)
  end
end

Worker2.perform_async(example1, example2, example3)