module Que::Locks::ExecutionLock
Public Class Methods
already_enqueued_job_wanting_lock?(klass, args)
click to toggle source
# File lib/que/locks/execution_lock.rb, line 18 def already_enqueued_job_wanting_lock?(klass, args) args_string = Que.serialize_json(args) values = Que.execute(:args_already_enqueued, [klass.name, args_string]).first values[:count] != 0 end
aquire!(key)
click to toggle source
# File lib/que/locks/execution_lock.rb, line 44 def aquire!(key) result = Que.execute(:try_aquire_execution_lock, [key]).first result[:locked] end
can_aquire?(klass, args)
click to toggle source
# File lib/que/locks/execution_lock.rb, line 24 def can_aquire?(klass, args) can_aquire_key?(lock_key(klass, args)) end
can_aquire_key?(key)
click to toggle source
# File lib/que/locks/execution_lock.rb, line 28 def can_aquire_key?(key) result = false begin result = aquire!(key) ensure if result release!(key) end end result end
lock_key(klass, args)
click to toggle source
# File lib/que/locks/execution_lock.rb, line 40 def lock_key(klass, args) XXhash.xxh32(klass.name + ":" + Que.serialize_json(args), 42) / 2 end
release!(key)
click to toggle source
# File lib/que/locks/execution_lock.rb, line 49 def release!(key) Que.execute(:release_execution_lock, [key]) end