Class: Sidekiq::SortedEntry

Inherits:
JobRecord show all
Defined in:
lib/sidekiq/api.rb

Overview

Represents a job within a Redis sorted set where the score represents a timestamp associated with the job. This timestamp could be the scheduled time for it to run (e.g. scheduled set), or the expiration date after which the entry should be deleted (e.g. dead set).

Instance Attribute Summary collapse

Attributes inherited from JobRecord

#Item, #Queue, #Value, #item, #queue, #value

Instance Method Summary collapse

Methods inherited from JobRecord

#[], #args, #bid, #created_at, #display_args, #display_class, #enqueued_at, #error_backtrace, #jid, #klass, #latency, #parse, #tags

Constructor Details

#initialize(parent, score, item) ⇒ SortedEntry

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

:nodoc:



509
510
511
512
513
# File 'lib/sidekiq/api.rb', line 509

def initialize(parent, score, item)
  super(item)
  @score = Float(score)
  @parent = parent
end

Instance Attribute Details

#parentObject (readonly)

Returns the value of attribute parent.



505
506
507
# File 'lib/sidekiq/api.rb', line 505

def parent
  @parent
end

#scoreObject (readonly)

Returns the value of attribute score.



504
505
506
# File 'lib/sidekiq/api.rb', line 504

def score
  @score
end

Instance Method Details

#add_to_queueObject

Enqueue this job from the scheduled or dead set so it will be executed at some point in the near future.



540
541
542
543
544
545
# File 'lib/sidekiq/api.rb', line 540

def add_to_queue
  remove_job do |message|
    msg = Sidekiq.load_json(message)
    Sidekiq::Client.push(msg)
  end
end

#atObject

The timestamp associated with this entry



516
517
518
# File 'lib/sidekiq/api.rb', line 516

def at
  Time.at(score).utc
end

#deleteObject

remove this entry from the sorted set



521
522
523
524
525
526
527
# File 'lib/sidekiq/api.rb', line 521

def delete
  if @value
    @parent.delete_by_value(@parent.name, @value)
  else
    @parent.delete_by_jid(score, jid)
  end
end

#error?Boolean

Returns:

  • (Boolean)


564
565
566
# File 'lib/sidekiq/api.rb', line 564

def error?
  !!item["error_class"]
end

#killObject

Move this job from its current set into the Dead set.



558
559
560
561
562
# File 'lib/sidekiq/api.rb', line 558

def kill
  remove_job do |message|
    DeadSet.new.kill(message)
  end
end

#reschedule(at) ⇒ Object

Change the scheduled time for this job.

Parameters:

  • at (Time)

    the new timestamp for this job



532
533
534
535
536
# File 'lib/sidekiq/api.rb', line 532

def reschedule(at)
  Sidekiq.redis do |conn|
    conn.zincrby(@parent.name, at.to_f - @score, Sidekiq.dump_json(@item))
  end
end

#retryObject

enqueue this job from the retry set so it will be executed at some point in the near future.



549
550
551
552
553
554
555
# File 'lib/sidekiq/api.rb', line 549

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