unicorn.rb.example.development 2.54 KB
Newer Older
1 2 3 4 5 6 7 8
# frozen_string_literal: true

# -------------------------------------------------------------------------
# This file is used by the GDK to generate a default config/unicorn.rb file
# Note that `/home/git` will be substituted for the actual GDK root
# directory when this file is generated
# -------------------------------------------------------------------------

9
worker_processes 2
10
timeout 60
11

12 13
listen '/home/git/gitlab.socket'

14 15 16
preload_app true
check_client_connection false

17 18 19 20 21 22 23
require_relative "/home/git/gitlab/lib/gitlab/cluster/lifecycle_events"

before_exec do |server|
  # Signal application hooks that we're about to restart
  Gitlab::Cluster::LifecycleEvents.do_master_restart
end

24 25
run_once = true

26
before_fork do |server, worker|
27 28 29 30 31 32 33 34 35 36 37 38
  if run_once
    # There is a difference between Puma and Unicorn:
    # - Puma calls before_fork once when booting up master process
    # - Unicorn runs before_fork whenever new work is spawned
    # To unify this behavior we call before_fork only once (we use
    # this callback for deleting Prometheus files so for our purposes
    # it makes sense to align behavior with Puma)
    run_once = false

    # Signal application hooks that we're about to fork
    Gitlab::Cluster::LifecycleEvents.do_before_fork
  end
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

  # The following is only recommended for memory/DB-constrained
  # installations.  It is not needed if your system can house
  # twice as many worker_processes as you have configured.
  #
  # This allows a new master process to incrementally
  # phase out the old master process with SIGTTOU to avoid a
  # thundering herd (especially in the "preload_app false" case)
  # when doing a transparent upgrade.  The last worker spawned
  # will then kill off the old master process with a SIGQUIT.
  old_pid = "#{server.config[:pid]}.oldbin"
  if old_pid != server.pid
    begin
      sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
      Process.kill(sig, File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
    end
56
  end
57 58 59 60 61 62
  #
  # Throttle the master from forking too quickly by sleeping.  Due
  # to the implementation of standard Unix signal handlers, this
  # helps (but does not completely) prevent identical, repeated signals
  # from being lost when the receiving process is busy.
  # sleep 1
63 64
end

65
after_fork do |server, worker|
66 67
  # Signal application hooks of worker start
  Gitlab::Cluster::LifecycleEvents.do_worker_start
68

69 70 71
  # per-process listener ports for debugging/admin/migrations
  # addr = "127.0.0.1:#{9293 + worker.nr}"
  # server.listen(addr, :tries => -1, :delay => 5, :tcp_nopush => true)
72
end