Module: Que::Locks::ExecutionLock

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

Class Method Summary collapse

Class Method Details

.already_enqueued_job_wanting_lock?(klass, args) ⇒ Boolean

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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