lib/mini_scheduler/manager.rb in mini_scheduler-0.10.0 vs lib/mini_scheduler/manager.rb in mini_scheduler-0.11.0

- old
+ new

@@ -1,15 +1,19 @@ +# frozen_string_literal: true + module MiniScheduler class Manager attr_accessor :random_ratio, :redis, :enable_stats, :queue class Runner def initialize(manager) @stopped = false @mutex = Mutex.new @queue = Queue.new @manager = manager + @hostname = manager.hostname + @reschedule_orphans_thread = Thread.new do while !@stopped sleep 60 @mutex.synchronize do @@ -43,24 +47,21 @@ rescue => ex MiniScheduler.handle_job_exception(ex, message: "Scheduling manager orphan rescheduler") end def hostname - @hostname ||= begin - `hostname` - rescue - "unknown" - end + @hostname end def process_queue klass = @queue.deq - return unless klass - # hack alert, I need to both deq and set @running atomically. @running = true + + return if !klass + failed = false start = Time.now.to_f info = @mutex.synchronize { @manager.schedule_info(klass) } stat = nil error = nil @@ -143,11 +144,12 @@ def wait_till_done while !@queue.empty? && !(@queue.num_waiting > 0) sleep 0.001 end # this is a hack, but is only used for test anyway - sleep 0.001 + # if tests fail that depend on this we are forced to increase it. + sleep 0.010 while @running sleep 0.001 end end @@ -167,11 +169,10 @@ self.new(skip_runner: true) end def initialize(options = nil) @queue = options && options[:queue] || "default" - @redis = MiniScheduler.redis @random_ratio = 0.1 unless options && options[:skip_runner] @runner = Runner.new(self) self.class.current[@queue] = self @@ -190,10 +191,14 @@ def self.current @current ||= {} end def hostname - @hostname ||= `hostname`.strip + @hostname ||= begin + `hostname`.strip + rescue + "unknown" + end end def schedule_info(klass) MiniScheduler::ScheduleInfo.new(klass, self) end