module Datadog::Workers::IntervalLoop
Adds looping behavior to workers, with a sleep interval between each loop.
Constants
- BACK_OFF_MAX
- BACK_OFF_RATIO
- BASE_INTERVAL
Attributes
loop_back_off_max[W]
loop_back_off_ratio[W]
loop_base_interval[W]
Public Class Methods
included(base)
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 10 def self.included(base) base.send(:prepend, PrependedMethods) end
Public Instance Methods
loop_back_off!(amount = nil)
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 60 def loop_back_off!(amount = nil) @loop_wait_time = amount || [loop_wait_time * BACK_OFF_RATIO, BACK_OFF_MAX].min end
loop_back_off?()
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 56 def loop_back_off? false end
loop_back_off_max()
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 48 def loop_back_off_max @loop_back_off_max ||= BACK_OFF_MAX end
loop_back_off_ratio()
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 44 def loop_back_off_ratio @loop_back_off_ratio ||= BACK_OFF_RATIO end
loop_base_interval()
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 40 def loop_base_interval @loop_base_interval ||= BASE_INTERVAL end
loop_wait_time()
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 52 def loop_wait_time @loop_wait_time ||= loop_base_interval end
run_loop?()
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 35 def run_loop? return false unless instance_variable_defined?(:@run_loop) @run_loop == true end
stop_loop()
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 21 def stop_loop mutex.synchronize do return false unless run_loop? @run_loop = false shutdown.signal end true end
work_pending?()
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 31 def work_pending? run_loop? end
Protected Instance Methods
mutex()
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 71 def mutex @mutex ||= Mutex.new end
Private Instance Methods
perform_loop() { || ... }
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 77 def perform_loop @run_loop = true loop do if work_pending? # Run the task yield # Reset the wait interval loop_back_off!(loop_base_interval) elsif loop_back_off? # Back off the wait interval a bit loop_back_off! end # Wait for an interval, unless shutdown has been signaled. mutex.synchronize do return unless run_loop? || work_pending? shutdown.wait(mutex, loop_wait_time) if run_loop? end end end
shutdown()
click to toggle source
# File lib/ddtrace/workers/loop.rb, line 100 def shutdown @shutdown ||= ConditionVariable.new end