Class: SidekiqUniqueJobs::Lock::WhileExecuting
- Inherits:
-
Object
- Object
- SidekiqUniqueJobs::Lock::WhileExecuting
- Defined in:
- lib/sidekiq_unique_jobs/lock/while_executing.rb
Class Method Summary collapse
Instance Method Summary collapse
- #create_digest ⇒ Object
- #execute(_callback) ⇒ Object
-
#initialize(item, redis_pool = nil) ⇒ WhileExecuting
constructor
A new instance of WhileExecuting.
- #locked? ⇒ Boolean
- #synchronize ⇒ Object
Constructor Details
#initialize(item, redis_pool = nil) ⇒ WhileExecuting
Returns a new instance of WhileExecuting.
8 9 10 11 12 13 |
# File 'lib/sidekiq_unique_jobs/lock/while_executing.rb', line 8 def initialize(item, redis_pool = nil) @item = item @mutex = Mutex.new @redis_pool = redis_pool @unique_digest = "#{create_digest}:run" end |
Class Method Details
.synchronize(item, redis_pool = nil) ⇒ Object
4 5 6 |
# File 'lib/sidekiq_unique_jobs/lock/while_executing.rb', line 4 def self.synchronize(item, redis_pool = nil) new(item, redis_pool).synchronize { yield } end |
Instance Method Details
#create_digest ⇒ Object
36 37 38 39 |
# File 'lib/sidekiq_unique_jobs/lock/while_executing.rb', line 36 def create_digest @unique_digest ||= @item[UNIQUE_DIGEST_KEY] @unique_digest ||= SidekiqUniqueJobs::UniqueArgs.digest(@item) end |
#execute(_callback) ⇒ Object
30 31 32 33 34 |
# File 'lib/sidekiq_unique_jobs/lock/while_executing.rb', line 30 def execute(_callback) synchronize do yield end end |
#locked? ⇒ Boolean
26 27 28 |
# File 'lib/sidekiq_unique_jobs/lock/while_executing.rb', line 26 def locked? Scripts.call(:synchronize, @redis_pool, keys: [@unique_digest], argv: [Time.now.to_i]) == 1 end |
#synchronize ⇒ Object
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/sidekiq_unique_jobs/lock/while_executing.rb', line 15 def synchronize @mutex.lock sleep 0.001 until locked? yield ensure SidekiqUniqueJobs.connection(@redis_pool) { |c| c.del @unique_digest } @mutex.unlock end |