in lib/puma/cluster.rb [181:225]
def check_workers(force=false)
return if !force && @next_check && @next_check >= Time.now
@next_check = Time.now + Const::WORKER_CHECK_INTERVAL
any = false
@workers.each do |w|
next if !w.booted? && !w.ping_timeout?(@options[:worker_boot_timeout])
if w.ping_timeout?(@options[:worker_timeout])
log "! Terminating timed out worker: #{w.pid}"
w.kill
any = true
end
end
sleep 1 if any
wait_workers
cull_workers
spawn_workers
if all_workers_booted?
w = @workers.find { |x| x.phase != @phase }
if w
if @phased_state == :idle
@phased_state = :waiting
log "- Stopping #{w.pid} for phased upgrade..."
end
unless w.term?
w.term
log "- #{w.signal} sent to #{w.pid}..."
end
end
end
end