class PerfectQueue::Multiprocess::ChildProcess

Constants

HEARTBEAT_PACKET

Public Class Methods

new(runner, processor_id, config, wpipe) click to toggle source
Calls superclass method
# File lib/perfectqueue/multiprocess/child_process.rb, line 27
def initialize(runner, processor_id, config, wpipe)
  @wpipe = wpipe
  @wpipe.sync = true
  @request_per_child = 0
  super(runner, processor_id, config)
  @sig = install_signal_handlers
end
run(runner, processor_id, config, wpipe) click to toggle source
# File lib/perfectqueue/multiprocess/child_process.rb, line 23
def self.run(runner, processor_id, config, wpipe)
  new(runner, processor_id, config, wpipe).run
end

Public Instance Methods

child_heartbeat() click to toggle source

override

# File lib/perfectqueue/multiprocess/child_process.rb, line 63
def child_heartbeat
  @wpipe.write HEARTBEAT_PACKET
rescue
  @log.error "Parent process unexpectedly died: #{$!}"
  force_stop
end
force_stop() click to toggle source

override

Calls superclass method
# File lib/perfectqueue/multiprocess/child_process.rb, line 71
def force_stop
  super
  Process.kill(:KILL, Process.pid)
  exit! 137
end
join() click to toggle source

override

# File lib/perfectqueue/multiprocess/child_process.rb, line 48
def join
  # do nothing
end
keepalive() click to toggle source

override

# File lib/perfectqueue/multiprocess/child_process.rb, line 53
def keepalive
  # do nothing
end
logrotated() click to toggle source

override

# File lib/perfectqueue/multiprocess/child_process.rb, line 58
def logrotated
  @log.reopen!
end
process(task) click to toggle source

override

Calls superclass method
# File lib/perfectqueue/multiprocess/child_process.rb, line 86
def process(task)
  super
  if @max_request_per_child
    @request_per_child += 1
    if @request_per_child > @max_request_per_child
      stop(false)
    end
  end
end
restart(immediate, config) click to toggle source

override

Calls superclass method
# File lib/perfectqueue/multiprocess/child_process.rb, line 80
def restart(immediate, config)
  @max_request_per_child = config[:max_request_per_child] || nil
  super
end
run() click to toggle source

override

Calls superclass method
# File lib/perfectqueue/multiprocess/child_process.rb, line 36
def run
  super
  @sig.stop
end
stop(immediate) click to toggle source

override

Calls superclass method
# File lib/perfectqueue/multiprocess/child_process.rb, line 42
def stop(immediate)
  @log.info "Exiting processor id=#{@processor_id} pid=#{Process.pid}"
  super
end

Private Instance Methods

install_signal_handlers() click to toggle source
# File lib/perfectqueue/multiprocess/child_process.rb, line 97
def install_signal_handlers
  s = self
  SignalThread.new do |st|
    st.trap :TERM do
      s.stop(false)
    end
    st.trap :INT do
      s.stop(false)
    end

    st.trap :QUIT do
      s.stop(true)
    end

    st.trap :USR1 do
      s.stop(false)
    end

    st.trap :HUP do
      s.stop(true)
    end

    st.trap :CONT do
      s.stop(false)
    end

    st.trap :WINCH do
      s.stop(true)
    end

    st.trap :USR2 do
      s.logrotated
    end

    trap :CHLD, "SIG_DFL"
  end
end