class Sidekiq::Cluster::WorkerPool
Constants
- MONITORS
Attributes
cli[RW]
config[RW]
monitors[RW]
process_count[RW]
workers[RW]
Public Class Methods
new(cli, config)
click to toggle source
# File lib/sidekiq/cluster/worker_pool.rb, line 48 def initialize(cli, config) self.cli = cli self.config = config self.process_count = config.process_count self.workers = [] self.monitors = [] self.state = :idle @signal_received = false end
Public Instance Methods
operational?()
click to toggle source
# File lib/sidekiq/cluster/worker_pool.rb, line 82 def operational? shutdown! if stopping? stop! if @signal_received state_name == :running end
spawn()
click to toggle source
# File lib/sidekiq/cluster/worker_pool.rb, line 59 def spawn start! create_workers info "spawning #{workers.size} workers..." workers.each(&:spawn) info "worker pids: #{workers.map(&:pid)}" setup_signal_traps started! start_monitors info 'startup successful' Process.waitall monitors.each(&:join) info 'all children exited, shutting down' end
Private Instance Methods
create_workers()
click to toggle source
# File lib/sidekiq/cluster/worker_pool.rb, line 90 def create_workers process_count.times { |index| self.workers << Worker.new(index, cli) } end
handle_signal(sig)
click to toggle source
# File lib/sidekiq/cluster/worker_pool.rb, line 106 def handle_signal(sig) cli.stderr.puts "received OS signal #{sig}" @signal_received = true if (sig == 'INT' || sig == 'TERM' || sig == 'STOP') workers.each { |w| w.handle_signal(sig) } end
setup_signal_traps()
click to toggle source
# File lib/sidekiq/cluster/worker_pool.rb, line 98 def setup_signal_traps %w(INT USR1 TERM).each do |sig| Signal.trap(sig) do handle_signal(sig) end end end
start_monitors()
click to toggle source
# File lib/sidekiq/cluster/worker_pool.rb, line 94 def start_monitors self.monitors = MONITORS.map { |monitor| monitor.new(self).start } end