Sha256: af3485d4953d88fc6d7f77a0bfc837af9cddc03526dd46e7a0ddb83eb3bcaf21

Contents?: true

Size: 964 Bytes

Versions: 1

Compression:

Stored size: 964 Bytes

Contents

require 'server/starter/version'

class Server::Starter
  class ResqueListener
    # This allows a new master process to incrementally
    # phase out the old master process with SIGTTOU.
    # The last worker spawned will then kill off the old master
    # process with a SIGQUIT.
    #
    # @param starter [ResqueStarter]
    # @param worker [Resque::Worker]
    # @param worker_nr [Integer] worker number
    # @param status_file [String] path to Server::Starter status file (--status-file)
    def self.graceful_restart(starter, worker, worker_nr, status_file)
      pids = File.readlines(status_file).map {|_| _.chomp.split(':') }.to_h
      old_gen = ENV['SERVER_STARTER_GENERATION'].to_i - 1
      if old_pid = pids[old_gen.to_s]
        sig = (worker_nr + 1) >= starter.num_workers ? :QUIT : :TTOU
        Process.kill(sig, old_pid.to_i)
      end
    rescue Errno::ENOENT, Errno::ESRCH => e
      $stderr.puts "#{e.class} #{e.message}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
server-starter-0.3.2 lib/server/starter/resque_listener.rb