spec/delayed/backend/test.rb in delayed_job-3.0.1 vs spec/delayed/backend/test.rb in delayed_job-3.0.2

- old
+ new

@@ -13,59 +13,59 @@ attr_accessor :run_at attr_accessor :locked_at attr_accessor :locked_by attr_accessor :failed_at attr_accessor :queue - + include Delayed::Backend::Base cattr_accessor :id self.id = 0 - + def initialize(hash = {}) self.attempts = 0 self.priority = 0 self.id = (self.class.id += 1) hash.each{|k,v| send(:"#{k}=", v)} end - + @jobs = [] def self.all @jobs end - - def self.count + + def self.count all.size end - + def self.delete_all all.clear end - + def self.create(attrs = {}) new(attrs).tap do |o| o.save end end - + def self.create!(*args); create(*args); end - + def self.clear_locks!(worker_name) all.select{|j| j.locked_by == worker_name}.each {|j| j.locked_by = nil; j.locked_at = nil} end # Find a few candidate jobs to run (in case some immediately get locked by others). def self.find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time) - jobs = all.select do |j| - j.run_at <= db_time_now && + jobs = all.select do |j| + j.run_at <= db_time_now && (j.locked_at.nil? || j.locked_at < db_time_now - max_run_time || j.locked_by == worker_name) && - j.failed_at.nil? + !j.failed? end - + jobs = jobs.select{|j| Worker.queues.include?(j.queue)} if Worker.queues.any? jobs = jobs.select{|j| j.priority >= Worker.min_priority} if Worker.min_priority - jobs = jobs.select{|j| j.priority <= Worker.max_priority} if Worker.max_priority + jobs = jobs.select{|j| j.priority <= Worker.max_priority} if Worker.max_priority jobs.sort_by{|j| [j.priority, j.run_at]}[0..limit-1] end # Lock this job for this worker. # Returns true if we have the lock, false otherwise. @@ -81,28 +81,28 @@ end def self.db_time_now Time.current end - + def update_attributes(attrs = {}) attrs.each{|k,v| send(:"#{k}=", v)} save end - + def destroy self.class.all.delete(self) end - + def save self.run_at ||= Time.current - + self.class.all << self unless self.class.all.include?(self) true end - + def save!; save; end - + def reload reset self end end