Module: Que::Locks::ExecutionLock

Defined in:
lib/que/locks/execution_lock.rb

Class Method Summary collapse

Class Method Details

.acquire!(key) ⇒ Object



57
58
59
60
# File 'lib/que/locks/execution_lock.rb', line 57

def acquire!(key)
  result = Que.execute(:try_acquire_execution_lock, [key]).first
  result[:locked]
end

.already_enqueued_job_wanting_lock?(klass, args) ⇒ Boolean



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/que/locks/execution_lock.rb', line 22

def already_enqueued_job_wanting_lock?(klass, args)
  query = :args_already_enqueued
  if active_job_class?(klass)
    args = active_jobless_args(args)
    query = :active_job_args_already_enqueued
  end

  args_string = Que.serialize_json(args)
  values = Que.execute(query, [klass.name, args_string]).first
  values[:count] != 0
end

.can_acquire?(klass, args) ⇒ Boolean



34
35
36
# File 'lib/que/locks/execution_lock.rb', line 34

def can_acquire?(klass, args)
  can_acquire_key?(lock_key(klass, args))
end

.can_acquire_key?(key) ⇒ Boolean



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/que/locks/execution_lock.rb', line 38

def can_acquire_key?(key)
  result = false
  begin
    result = acquire!(key)
  ensure
    if result
      release!(key)
    end
  end
  result
end

.lock_key(klass, args) ⇒ Object



50
51
52
53
54
55
# File 'lib/que/locks/execution_lock.rb', line 50

def lock_key(klass, args)
  if active_job_class?(klass)
    args = active_jobless_args(args)
  end
  XXhash.xxh32(klass.name + ":" + Que.serialize_json(args), 42) / 2
end

.release!(key) ⇒ Object



62
63
64
# File 'lib/que/locks/execution_lock.rb', line 62

def release!(key)
  Que.execute(:release_execution_lock, [key])
end