Module: Que::Locks::JobExtensions

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#exclusive_execution_lockObject

Returns the value of attribute exclusive_execution_lock.



3
4
5
# File 'lib/que/locks/job_extensions.rb', line 3

def exclusive_execution_lock
  @exclusive_execution_lock
end

Instance Method Details

#enqueue(*args, queue: nil, priority: nil, run_at: nil, job_class: nil, tags: nil, **arg_opts) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/que/locks/job_extensions.rb', line 12

def enqueue(*args, queue: nil, priority: nil, run_at: nil, job_class: nil, tags: nil, **arg_opts)
  if self.exclusive_execution_lock
    args_list = args.clone
    args_list << arg_opts if arg_opts.any?

    if Que::Locks::ExecutionLock.already_enqueued_job_wanting_lock?(self, args_list)
      Que.log(level: :info, event: :skipped_enqueue_due_to_preemptive_lock_check, args: args_list)
    else
      super
    end
  else
    super
  end
end

#lock_available?(*args, queue: nil, priority: nil, run_at: nil, job_class: nil, tags: nil, **arg_opts) ⇒ Boolean

rubocop:disable Lint/UnusedMethodArgument

Returns:

  • (Boolean)


5
6
7
8
9
10
# File 'lib/que/locks/job_extensions.rb', line 5

def lock_available?(*args, queue: nil, priority: nil, run_at: nil, job_class: nil, tags: nil, **arg_opts) # rubocop:disable Lint/UnusedMethodArgument
  args << arg_opts if arg_opts.any?
  return true unless self.exclusive_execution_lock
  return false if Que::Locks::ExecutionLock.already_enqueued_job_wanting_lock?(self, args)
  return Que::Locks::ExecutionLock.can_aquire?(self, args)
end