class Sidekiq::SortedEntry
Attributes
parent[R]
score[R]
Public Class Methods
new(parent, score, item)
click to toggle source
Calls superclass method
Sidekiq::Job.new
# File lib/sidekiq/api.rb, line 388 def initialize(parent, score, item) super(item) @score = score @parent = parent end
Public Instance Methods
add_to_queue()
click to toggle source
# File lib/sidekiq/api.rb, line 411 def add_to_queue remove_job do |message| msg = Sidekiq.load_json(message) Sidekiq::Client.push(msg) end end
at()
click to toggle source
# File lib/sidekiq/api.rb, line 394 def at Time.at(score).utc end
delete()
click to toggle source
# File lib/sidekiq/api.rb, line 398 def delete if @value @parent.delete_by_value(@parent.name, @value) else @parent.delete_by_jid(score, jid) end end
kill()
click to toggle source
Place job in the dead set
# File lib/sidekiq/api.rb, line 429 def kill raise 'Kill not available on jobs which have not failed' unless item['failed_at'] remove_job do |message| Sidekiq.logger.info { "Killing job #{message['jid']}" } now = Time.now.to_f Sidekiq.redis do |conn| conn.multi do conn.zadd('dead', now, message) conn.zremrangebyscore('dead', '-inf', now - DeadSet.timeout) conn.zremrangebyrank('dead', 0, - DeadSet.max_jobs) end end end end
reschedule(at)
click to toggle source
# File lib/sidekiq/api.rb, line 406 def reschedule(at) delete @parent.schedule(at, item) end
retry()
click to toggle source
# File lib/sidekiq/api.rb, line 418 def retry raise "Retry not available on jobs which have not failed" unless item["failed_at"] remove_job do |message| msg = Sidekiq.load_json(message) msg['retry_count'] -= 1 Sidekiq::Client.push(msg) end end
Private Instance Methods
remove_job() { |first| ... }
click to toggle source
# File lib/sidekiq/api.rb, line 446 def remove_job Sidekiq.redis do |conn| results = conn.multi do conn.zrangebyscore(parent.name, score, score) conn.zremrangebyscore(parent.name, score, score) end.first if results.size == 1 yield results.first else # multiple jobs with the same score # find the one with the right JID and push it hash = results.group_by do |message| if message.index(jid) msg = Sidekiq.load_json(message) msg['jid'] == jid else false end end msg = hash.fetch(true, []).first yield msg if msg # push the rest back onto the sorted set conn.multi do hash.fetch(false, []).each do |message| conn.zadd(parent.name, score.to_f.to_s, message) end end end end end