Class: Autoscaler::Sidekiq::ThreadServer

Inherits:
Object
  • Object
show all
Defined in:
lib/autoscaler/sidekiq/thread_server.rb

Overview

Sidekiq server middleware Sidekiq creates a new instance of the middleware for each worker spawns a Monitor thread to monitor the sidekiq server for scale-down

Instance Method Summary collapse

Constructor Details

#initialize(scaler, timeout, specified_queues = nil) ⇒ ThreadServer

Returns a new instance of ThreadServer.

Parameters:

  • scaler (scaler)

    object that actually performs scaling operations (e.g. HerokuPlatformScaler)

  • timeout (Strategy, Numeric)

    strategy object that determines target workers, or a timeout in seconds to be passed to DelayedShutdown+BinaryScalingStrategy

  • specified_queues (Array[String]) (defaults to: nil)

    list of queues to monitor to determine if there is work left. Defaults to all sidekiq queues.



15
16
17
18
19
# File 'lib/autoscaler/sidekiq/thread_server.rb', line 15

def initialize(scaler, timeout, specified_queues = nil)
  @scaler = scaler
  @strategy = strategy(timeout)
  @system = QueueSystem.new(specified_queues)
end

Instance Method Details

#call(worker, msg, queue, _ = nil) ⇒ Object

Sidekiq middleware api entry point



22
23
24
25
26
27
# File 'lib/autoscaler/sidekiq/thread_server.rb', line 22

def call(worker, msg, queue, _ = nil)
  yield
ensure
  monitor.active_now!
  monitor.wait_for_downscale(@scaler, @strategy, @system)
end