44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/delayed/backend/data_mapper.rb', line 44
def self.find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time)
simple_conditions = { :run_at.lte => db_time_now, :limit => limit, :failed_at => nil, :order => [:priority.asc, :run_at.asc] }
simple_conditions[:priority.gte] = Worker.min_priority if Worker.min_priority
simple_conditions[:priority.lte] = Worker.max_priority if Worker.max_priority
lockable = (
( all(:locked_at => nil ) | all(:locked_at.lt => db_time_now - max_run_time)) |
all(:locked_by => worker_name))
(lockable).all( simple_conditions )
end
|