Skip to content

A Resque plugin for ensuring only one instance of your job is running at a time.

License

Notifications You must be signed in to change notification settings

efficiency20/resque-fine-grained-locks

 
 

Repository files navigation

Resque Fine-Grained Locks

A [Resque][rq] plugin. Requires Resque 1.7.0.

If you want only one instance of your job queued at a time, extend it with Resque::Plugins::QueueLock. You will be able to enqueue another job if one is currently executing.

For example:

require 'resque/plugins/queue_lock'

class UpdateNetworkGraph
  extend Resque::Plugins::QueueLock

  def self.perform(repo_id)
    heavy_lifting
  end
end

If you want only one instance of your job to execute at a time, extend it with Resque::Plugins::ExecutionLock. You can optionally use resque-retry if you want to retry locked jobs without them failing.

For example:

require 'resque/plugins/execution_lock'

class UpdateNetworkGraph extend Resque::Plugins::Retry extend Resque::Plugins::ExecutionLock

@retry_exceptions = [ Resque::Plugins::ExecutionLock::JobIsLocked ]

def self.perform(repo_id) heavy_lifting end end

And in your resque initializer (config/resque.rb):

require 'resque/failure/multiple'

Resque::Failure::MultipleWithRetrySuppression.classes = [Resque::Plugins::ExecutionLock::JobIsLocked] Resque::Failure.backend = Resque::Failure::MultipleWithRetrySuppression

About

A Resque plugin for ensuring only one instance of your job is running at a time.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%