class ServerEngine::MultiProcessServer::WorkerMonitor

Attributes

exitstatus[R]

Public Class Methods

new(worker, wid, pmon, reload_signal = Signals::RELOAD, unrecoverable_exit_codes: []) click to toggle source
# File lib/serverengine/multi_process_server.rb, line 100
def initialize(worker, wid, pmon, reload_signal = Signals::RELOAD, unrecoverable_exit_codes: [])
  @worker = worker
  @wid = wid
  @pmon = pmon
  @reload_signal = reload_signal
  @unrecoverable_exit_codes = unrecoverable_exit_codes
  @unrecoverable_exit = false
  @exitstatus = nil
end

Public Instance Methods

alive?() click to toggle source
# File lib/serverengine/multi_process_server.rb, line 141
def alive?
  return false unless @pmon

  if stat = @pmon.try_join
    if @stop
      @worker.logger.info "Worker #{@wid} finished with #{ServerEngine.format_join_status(stat)}"
    else
      @worker.logger.error "Worker #{@wid} finished unexpectedly with #{ServerEngine.format_join_status(stat)}"
    end
    if stat.is_a?(Process::Status) && stat.exited? && @unrecoverable_exit_codes.include?(stat.exitstatus)
      @unrecoverable_exit = true
      @exitstatus = stat.exitstatus
    end
    @pmon = nil
    return false
  else
    return true
  end
end
join() click to toggle source
# File lib/serverengine/multi_process_server.rb, line 136
def join
  @pmon.join if @pmon
  nil
end
recoverable?() click to toggle source
# File lib/serverengine/multi_process_server.rb, line 161
def recoverable?
  !@unrecoverable_exit
end
send_command(command) click to toggle source
# File lib/serverengine/multi_process_server.rb, line 132
def send_command(command)
  @pmon.send_command(command) if @pmon
end
send_reload() click to toggle source
# File lib/serverengine/multi_process_server.rb, line 122
def send_reload
  return nil unless @pmon
  if @pmon.command_sender_pipe
    send_command("RELOAD\n")
  else
    @pmon.send_signal(@reload_signal)
  end
  nil
end
send_stop(stop_graceful) click to toggle source
# File lib/serverengine/multi_process_server.rb, line 112
def send_stop(stop_graceful)
  @stop = true
  if stop_graceful
    @pmon.start_graceful_stop! if @pmon
  else
    @pmon.start_immediate_stop! if @pmon
  end
  nil
end