Class: SidekiqUniqueJobs::OnConflict::Reject

Inherits:
Strategy
  • Object
show all
Defined in:
lib/sidekiq_unique_jobs/on_conflict/reject.rb

Overview

Strategy to send jobs to dead queue

Author:

Instance Attribute Summary

Attributes inherited from Strategy

#item

Instance Method Summary collapse

Methods inherited from Strategy

#initialize, #replace?

Methods included from Logging

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger, #logging_context

Constructor Details

This class inherits a constructor from SidekiqUniqueJobs::OnConflict::Strategy

Instance Method Details

#callObject

Send jobs to dead queue



10
11
12
13
# File 'lib/sidekiq_unique_jobs/on_conflict/reject.rb', line 10

def call
  log_debug { "Rejecting job with jid: #{item[JID_KEY]}" }
  send_to_deadset
end

#current_timeObject



63
64
65
# File 'lib/sidekiq_unique_jobs/on_conflict/reject.rb', line 63

def current_time
  @current_time ||= Time.now.to_f
end

#deadsetObject



49
50
51
# File 'lib/sidekiq_unique_jobs/on_conflict/reject.rb', line 49

def deadset
  @deadset ||= Sidekiq::DeadSet.new
end

#deadset_killObject



29
30
31
32
33
34
35
# File 'lib/sidekiq_unique_jobs/on_conflict/reject.rb', line 29

def deadset_kill
  if kill_with_options?
    kill_job_with_options
  else
    kill_job_without_options
  end
end

#deadset_kill?Boolean

Returns:

  • (Boolean)


25
26
27
# File 'lib/sidekiq_unique_jobs/on_conflict/reject.rb', line 25

def deadset_kill?
  deadset.respond_to?(:kill)
end

#kill_job_with_optionsObject



45
46
47
# File 'lib/sidekiq_unique_jobs/on_conflict/reject.rb', line 45

def kill_job_with_options
  deadset.kill(payload, notify_failure: false)
end

#kill_job_without_optionsObject



41
42
43
# File 'lib/sidekiq_unique_jobs/on_conflict/reject.rb', line 41

def kill_job_without_options
  deadset.kill(payload)
end

#kill_with_options?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/sidekiq_unique_jobs/on_conflict/reject.rb', line 37

def kill_with_options?
  Sidekiq::DeadSet.instance_method(:kill).arity > 1
end

#payloadObject



67
68
69
# File 'lib/sidekiq_unique_jobs/on_conflict/reject.rb', line 67

def payload
  @payload ||= Sidekiq.dump_json(item)
end

#push_to_deadsetObject



53
54
55
56
57
58
59
60
61
# File 'lib/sidekiq_unique_jobs/on_conflict/reject.rb', line 53

def push_to_deadset
  Sidekiq.redis do |conn|
    conn.multi do
      conn.zadd("dead", current_time, payload)
      conn.zremrangebyscore("dead", "-inf", current_time - Sidekiq::DeadSet.timeout)
      conn.zremrangebyrank("dead", 0, -Sidekiq::DeadSet.max_jobs)
    end
  end
end

#send_to_deadsetObject



15
16
17
18
19
20
21
22
23
# File 'lib/sidekiq_unique_jobs/on_conflict/reject.rb', line 15

def send_to_deadset
  log_info { "Adding dead #{item[CLASS_KEY]} job #{item[JID_KEY]}" }

  if deadset_kill?
    deadset_kill
  else
    push_to_deadset
  end
end