Class: Textus::Maintenance::Serve

Inherits:
Object
  • Object
show all
Defined in:
lib/textus/maintenance/serve.rb

Overview

The convergence daemon loop: seed scheduled work (TTL re-pull + sweep), reclaim crashed leases, drain the queue, sleep, repeat. ‘tick` is one iteration (unit-testable); `run` loops forever. Drains serially for the same reason as Drain — each produce job self-locks, so running them in turn keeps the build lock uncontended.

Instance Method Summary collapse

Constructor Details

#initialize(container:, call:) ⇒ Serve

Returns a new instance of Serve.



9
10
11
12
13
# File 'lib/textus/maintenance/serve.rb', line 9

def initialize(container:, call:)
  @container = container
  @call = call
  @queue = Textus::Ports::Queue.new(root: container.root)
end

Instance Method Details

#run(poll: nil) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/textus/maintenance/serve.rb', line 21

def run(poll: nil)
  interval = poll || @container.manifest.data.worker_config[:poll]
  loop do
    tick
    sleep(interval)
  end
end

#tickObject



15
16
17
18
19
# File 'lib/textus/maintenance/serve.rb', line 15

def tick
  Textus::Jobs::Scheduler.new(container: @container, queue: @queue).run_once
  @queue.reclaim(now: Textus::Ports::Clock.new.now)
  Worker.for(container: @container, queue: @queue).drain
end