Module: Que::Locks::ExecutionLock
- Defined in:
- lib/que/locks/execution_lock.rb
Class Method Summary collapse
- .already_enqueued_job_wanting_lock?(klass, args) ⇒ Boolean
- .aquire!(key) ⇒ Object
- .can_aquire?(klass, args) ⇒ Boolean
- .can_aquire_key?(key) ⇒ Boolean
- .lock_key(klass, args) ⇒ Object
- .release!(key) ⇒ Object
Class Method Details
.already_enqueued_job_wanting_lock?(klass, args) ⇒ Boolean
18 19 20 21 22 |
# 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) ⇒ Object
44 45 46 47 |
# 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) ⇒ Boolean
24 25 26 |
# 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) ⇒ Boolean
28 29 30 31 32 33 34 35 36 37 38 |
# 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) ⇒ Object
40 41 42 |
# 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) ⇒ Object
49 50 51 |
# File 'lib/que/locks/execution_lock.rb', line 49 def release!(key) Que.execute(:release_execution_lock, [key]) end |