From 83113dc62a27f6148091c1fadd5de2bc96aff47d Mon Sep 17 00:00:00 2001 From: Aleksei Lipniagov Date: Thu, 20 May 2021 18:36:41 +0300 Subject: [PATCH 1/2] Remove UnicornHttpServer mixin Split from https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61888. --- .../cluster_events_before_phased_restart.rb | 2 - .../cluster/mixins/unicorn_http_server.rb | 34 ----- .../mixins/unicorn_http_server_spec.rb | 117 ------------------ 3 files changed, 153 deletions(-) delete mode 100644 lib/gitlab/cluster/mixins/unicorn_http_server.rb delete mode 100644 spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb diff --git a/config/initializers/cluster_events_before_phased_restart.rb b/config/initializers/cluster_events_before_phased_restart.rb index d029adbe3634ad..c3d3a408d314e0 100644 --- a/config/initializers/cluster_events_before_phased_restart.rb +++ b/config/initializers/cluster_events_before_phased_restart.rb @@ -9,6 +9,4 @@ if Gitlab::Runtime.puma? Puma::Cluster.prepend(::Gitlab::Cluster::Mixins::PumaCluster) -elsif Gitlab::Runtime.unicorn? - Unicorn::HttpServer.prepend(::Gitlab::Cluster::Mixins::UnicornHttpServer) end diff --git a/lib/gitlab/cluster/mixins/unicorn_http_server.rb b/lib/gitlab/cluster/mixins/unicorn_http_server.rb deleted file mode 100644 index 440ed02a3557f5..00000000000000 --- a/lib/gitlab/cluster/mixins/unicorn_http_server.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module Cluster - module Mixins - module UnicornHttpServer - def self.prepended(base) - unless base.method_defined?(:reexec) && base.method_defined?(:stop) - raise 'missing method Unicorn::HttpServer#reexec or Unicorn::HttpServer#stop' - end - end - - def reexec - Gitlab::Cluster::LifecycleEvents.do_before_graceful_shutdown - - super - end - - # The stop on non-graceful shutdown is executed twice: - # `#stop(false)` and `#stop`. - # - # The first stop will wipe-out all workers, so we need to check - # the flag and a list of workers - def stop(graceful = true) - if graceful && @workers.any? # rubocop:disable Gitlab/ModuleWithInstanceVariables - Gitlab::Cluster::LifecycleEvents.do_before_graceful_shutdown - end - - super - end - end - end - end -end diff --git a/spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb b/spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb deleted file mode 100644 index 7f7c95b252710d..00000000000000 --- a/spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb +++ /dev/null @@ -1,117 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -# For easier debugging set `UNICORN_DEBUG=1` - -RSpec.describe Gitlab::Cluster::Mixins::UnicornHttpServer do - before do - stub_const('UNICORN_STARTUP_TIMEOUT', 30) - end - - context 'when running Unicorn' do - using RSpec::Parameterized::TableSyntax - - where(:signal, :exitstatus, :termsig) do - # executes phased restart block - :USR2 | 140 | nil - :QUIT | 140 | nil - - # does not execute phased restart block - :INT | 0 | nil - :TERM | 0 | nil - end - - with_them do - it 'properly handles process lifecycle' do - with_unicorn(workers: 1) do |pid| - Process.kill(signal, pid) - - child_pid, child_status = Process.wait2(pid) - expect(child_pid).to eq(pid) - expect(child_status.exitstatus).to eq(exitstatus) - expect(child_status.termsig).to eq(termsig) - end - end - end - end - - private - - def with_unicorn(workers:, timeout: UNICORN_STARTUP_TIMEOUT) - with_unicorn_configs(workers: workers) do |unicorn_rb, config_ru| - cmdline = [ - "bundle", "exec", "unicorn", - "-I", Rails.root.to_s, - "-c", unicorn_rb, - config_ru - ] - - IO.popen(cmdline) do |process| - # wait for process to start: - # I, [2019-10-15T13:21:27.565225 #3089] INFO -- : master process ready - wait_for_output(process, /master process ready/, timeout: timeout) - consume_output(process) - - yield(process.pid) - ensure - begin - Process.kill(:KILL, process.pid) - rescue Errno::ESRCH - end - end - end - end - - def with_unicorn_configs(workers:) - Dir.mktmpdir do |dir| - File.write "#{dir}/unicorn.rb", <<-EOF - require './lib/gitlab/cluster/lifecycle_events' - require './lib/gitlab/cluster/mixins/unicorn_http_server' - - worker_processes #{workers} - listen "127.0.0.1:0" - preload_app true - - Unicorn::HttpServer.prepend(#{described_class}) - - mutex = Mutex.new - - Gitlab::Cluster::LifecycleEvents.on_before_blackout_period do - mutex.synchronize do - exit(140) - end - end - - # redirect stderr to stdout - $stderr.reopen($stdout) - EOF - - File.write "#{dir}/config.ru", <<-EOF - run -> (env) { [404, {}, ['']] } - EOF - - yield("#{dir}/unicorn.rb", "#{dir}/config.ru") - end - end - - def wait_for_output(process, output, timeout:) - Timeout.timeout(timeout) do - loop do - line = process.readline - puts "UNICORN_DEBUG: #{line}" if ENV['UNICORN_DEBUG'] - break if line =~ output - end - end - end - - def consume_output(process) - Thread.new do - loop do - line = process.readline - puts "UNICORN_DEBUG: #{line}" if ENV['UNICORN_DEBUG'] - end - rescue StandardError - end - end -end -- GitLab From 015db96336751aa38394f3340a83d54b465883bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20K=C3=A4ppler?= Date: Fri, 21 May 2021 07:58:31 +0000 Subject: [PATCH 2/2] Apply 1 suggestion(s) to 1 file(s) --- config/initializers/cluster_events_before_phased_restart.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/initializers/cluster_events_before_phased_restart.rb b/config/initializers/cluster_events_before_phased_restart.rb index c3d3a408d314e0..f84682c1436658 100644 --- a/config/initializers/cluster_events_before_phased_restart.rb +++ b/config/initializers/cluster_events_before_phased_restart.rb @@ -7,6 +7,6 @@ # # Follow-up the issue: https://gitlab.com/gitlab-org/gitlab/issues/34107 -if Gitlab::Runtime.puma? - Puma::Cluster.prepend(::Gitlab::Cluster::Mixins::PumaCluster) -end +return unless Gitlab::Runtime.puma? + +Puma::Cluster.prepend(::Gitlab::Cluster::Mixins::PumaCluster) -- GitLab