class Sidekiq::SortedEntry
Attributes
parent[R]
score[R]
Public Class Methods
new(parent, score, item)
click to toggle source
Calls superclass method
Sidekiq::JobRecord::new
# File lib/sidekiq/api.rb, line 465 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 489 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 471 def at Time.at(score).utc end
delete()
click to toggle source
# File lib/sidekiq/api.rb, line 475 def delete if @value @parent.delete_by_value(@parent.name, @value) else @parent.delete_by_jid(score, jid) end end
error?()
click to toggle source
# File lib/sidekiq/api.rb, line 512 def error? !!item["error_class"] end
kill()
click to toggle source
Place job in the dead set
# File lib/sidekiq/api.rb, line 506 def kill remove_job do |message| DeadSet.new.kill(message) end end
reschedule(at)
click to toggle source
# File lib/sidekiq/api.rb, line 483 def reschedule(at) Sidekiq.redis do |conn| conn.zincrby(@parent.name, at.to_f - @score, Sidekiq.dump_json(@item)) end end
retry()
click to toggle source
# File lib/sidekiq/api.rb, line 496 def retry remove_job do |message| msg = Sidekiq.load_json(message) msg["retry_count"] -= 1 if msg["retry_count"] Sidekiq::Client.push(msg) end end
Private Instance Methods
remove_job() { |first| ... }
click to toggle source
# File lib/sidekiq/api.rb, line 518 def remove_job Sidekiq.redis do |conn| results = conn.multi { conn.zrangebyscore(parent.name, score, score) conn.zremrangebyscore(parent.name, score, score) }.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 matched, nonmatched = results.partition { |message| if message.index(jid) msg = Sidekiq.load_json(message) msg["jid"] == jid else false end } msg = matched.first yield msg if msg # push the rest back onto the sorted set conn.multi do nonmatched.each do |message| conn.zadd(parent.name, score.to_f.to_s, message) end end end end end