Sha256: e3fb24b851998570e8c7e84becef9f33009bea5b538fa94ae621207f9b03fc97
Contents?: true
Size: 657 Bytes
Versions: 24
Compression:
Stored size: 657 Bytes
Contents
module Shipit class BackgroundJob module Unique extend ActiveSupport::Concern DEFAULT_TIMEOUT = 10 included do around_perform { |job, block| job.acquire_lock(&block) } cattr_accessor :lock_timeout end def acquire_lock(&block) mutex = Redis::Lock.new( lock_key(*arguments), Shipit.redis, expiration: self.class.timeout || DEFAULT_TIMEOUT, timeout: self.class.lock_timeout || 0, ) mutex.lock(&block) end def lock_key(*args) ActiveJob::Arguments.serialize([self.class.name] + args).join('-') end end end end
Version data entries
24 entries across 24 versions & 1 rubygems