Class: Joblin::Uniqueness::OnConflict::Reject

Inherits:
Base
  • Object
show all
Defined in:
lib/joblin/uniqueness/on_conflict/reject.rb

Instance Attribute Summary

Attributes inherited from Base

#lock_context, #redis_pool

Instance Method Summary collapse

Methods inherited from Base

#initialize, #replace?, valid_for

Constructor Details

This class inherits a constructor from Joblin::Uniqueness::OnConflict::Base

Instance Method Details

#callObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/joblin/uniqueness/on_conflict/reject.rb', line 6

def call
  # TODO Allow this to work on Sidekiq-backed ActiveJob
  unless lock_context.is_a?(Joblin::Uniqueness::Compat::Sidekiq::SidekiqLockContext)
    Joblin::Uniqueness.logger.error(":reject conflict strategy is not supported for non-Sidekiq-backed jobs")
    return
  end

  # Sidekiq::DeadSet lives in sidekiq/api, which isn't loaded server-side
  # by default; require it so we don't blow up with NameError here.
  require "sidekiq/api"

  kwargs = {}
  # Sidekiq's DeadSet#kill is `kill(message, opts = {})` (arity -2) on 7/8
  # and `kill(message)` (arity 1) on very old versions. Pass notify_failure
  # only when the method actually accepts options.
  kwargs[:notify_failure] = false if Sidekiq::DeadSet.instance_method(:kill).arity != 1

  sidekiq_message = lock_context.instance_variable_get(:@job_instance)
  Sidekiq::DeadSet.new.kill(JSON.dump(sidekiq_message), **kwargs)
end