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