Class: SidekiqUniqueJobs::Lock::UntilExecuted
- Inherits:
-
Object
- Object
- SidekiqUniqueJobs::Lock::UntilExecuted
show all
- Extended by:
- Forwardable
- Includes:
- Unlockable
- Defined in:
- lib/sidekiq_unique_jobs/lock/until_executed.rb
Instance Method Summary
collapse
Methods included from Unlockable
after_unlock, ensure_job_id_removed, logger, unlock, unlock_by_key
Constructor Details
#initialize(item, redis_pool = nil) ⇒ UntilExecuted
Returns a new instance of UntilExecuted.
13
14
15
16
|
# File 'lib/sidekiq_unique_jobs/lock/until_executed.rb', line 13
def initialize(item, redis_pool = nil)
@item = item
@redis_pool = redis_pool
end
|
Instance Method Details
#after_yield_yield ⇒ Object
62
63
64
|
# File 'lib/sidekiq_unique_jobs/lock/until_executed.rb', line 62
def after_yield_yield
yield
end
|
#execute(callback, &blk) ⇒ Object
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/sidekiq_unique_jobs/lock/until_executed.rb', line 18
def execute(callback, &blk)
operative = true
send(:after_yield_yield, &blk)
rescue Sidekiq::Shutdown
operative = false
raise
ensure
if operative && unlock(:server)
callback.call
else
logger.fatal { "the unique_key: #{unique_key} needs to be unlocked manually" }
end
end
|
#lock(scope) ⇒ Object
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/sidekiq_unique_jobs/lock/until_executed.rb', line 40
def lock(scope)
if scope.to_sym != :client
raise ArgumentError, "#{scope} middleware can't #{__method__} #{unique_key}"
end
Scripts::AcquireLock.execute(
redis_pool,
unique_key,
item[JID_KEY],
max_lock_time,
)
end
|
#unique_key ⇒ Object
rubocop:enable MethodLength
54
55
56
|
# File 'lib/sidekiq_unique_jobs/lock/until_executed.rb', line 54
def unique_key
@unique_key ||= UniqueArgs.digest(item)
end
|
#unlock(scope) ⇒ Object
32
33
34
35
36
37
38
|
# File 'lib/sidekiq_unique_jobs/lock/until_executed.rb', line 32
def unlock(scope)
unless [:server, :api, :test].include?(scope)
raise ArgumentError, "#{scope} middleware can't #{__method__} #{unique_key}"
end
unlock_by_key(unique_key, item[JID_KEY], redis_pool)
end
|