Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-11-07 18:06:33 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2019-11-07 18:06:33 +0300
commit90a06a20be61bb6d48d77746091492831153e075 (patch)
treebdba99289605f8b5acf12159d02aeb23f8690202 /lib/gitlab/cluster
parent84a0e65ac88c7a3db86a0e4347606ba093490bef (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/cluster')
-rw-r--r--lib/gitlab/cluster/lifecycle_events.rb61
1 files changed, 38 insertions, 23 deletions
diff --git a/lib/gitlab/cluster/lifecycle_events.rb b/lib/gitlab/cluster/lifecycle_events.rb
index f931a94938f..2b3dc94fc5e 100644
--- a/lib/gitlab/cluster/lifecycle_events.rb
+++ b/lib/gitlab/cluster/lifecycle_events.rb
@@ -10,38 +10,39 @@ module Gitlab
#
# We have the following lifecycle events.
#
- # - on_master_start:
+ # - on_before_fork (on master process):
#
# Unicorn/Puma Cluster: This will be called exactly once,
# on startup, before the workers are forked. This is
# called in the PARENT/MASTER process.
#
- # Sidekiq/Puma Single: This is called immediately.
+ # Sidekiq/Puma Single: This is not called.
#
- # - on_before_fork:
+ # - on_master_start (on master process):
#
# Unicorn/Puma Cluster: This will be called exactly once,
# on startup, before the workers are forked. This is
# called in the PARENT/MASTER process.
#
- # Sidekiq/Puma Single: This is not called.
+ # Sidekiq/Puma Single: This is called immediately.
#
- # - on_worker_start:
+ # - on_before_blackout_period (on master process):
#
- # Unicorn/Puma Cluster: This is called in the worker process
- # exactly once before processing requests.
+ # Unicorn/Puma Cluster: This will be called before a blackout
+ # period when performing graceful shutdown of master.
+ # This is called on `master` process.
#
- # Sidekiq/Puma Single: This is called immediately.
+ # Sidekiq/Puma Single: This is not called.
#
- # - on_before_graceful_shutdown:
+ # - on_before_graceful_shutdown (on master process):
#
# Unicorn/Puma Cluster: This will be called before a graceful
- # shutdown of workers starts happening.
+ # shutdown of workers starts happening, but after blackout period.
# This is called on `master` process.
#
# Sidekiq/Puma Single: This is not called.
#
- # - on_before_master_restart:
+ # - on_before_master_restart (on master process):
#
# Unicorn: This will be called before a new master is spun up.
# This is called on forked master before `execve` to become
@@ -53,6 +54,13 @@ module Gitlab
#
# Sidekiq/Puma Single: This is not called.
#
+ # - on_worker_start (on worker process):
+ #
+ # Unicorn/Puma Cluster: This is called in the worker process
+ # exactly once before processing requests.
+ #
+ # Sidekiq/Puma Single: This is called immediately.
+ #
# Blocks will be executed in the order in which they are registered.
#
class LifecycleEvents
@@ -75,6 +83,12 @@ module Gitlab
end
# Read the config/initializers/cluster_events_before_phased_restart.rb
+ def on_before_blackout_period(&block)
+ # Defer block execution
+ (@master_blackout_period ||= []) << block
+ end
+
+ # Read the config/initializers/cluster_events_before_phased_restart.rb
def on_before_graceful_shutdown(&block)
# Defer block execution
(@master_graceful_shutdown ||= []) << block
@@ -97,27 +111,24 @@ module Gitlab
# Lifecycle integration methods (called from unicorn.rb, puma.rb, etc.)
#
def do_worker_start
- @worker_start_hooks&.each do |block|
- block.call
- end
+ call(@worker_start_hooks)
end
def do_before_fork
- @before_fork_hooks&.each do |block|
- block.call
- end
+ call(@before_fork_hooks)
end
def do_before_graceful_shutdown
- @master_graceful_shutdown&.each do |block|
- block.call
- end
+ call(@master_blackout_period)
+
+ blackout_seconds = ::Settings.shutdown.blackout_seconds.to_i
+ sleep(blackout_seconds) if blackout_seconds > 0
+
+ call(@master_graceful_shutdown)
end
def do_before_master_restart
- @master_restart_hooks&.each do |block|
- block.call
- end
+ call(@master_restart_hooks)
end
# DEPRECATED
@@ -132,6 +143,10 @@ module Gitlab
private
+ def call(hooks)
+ hooks&.each(&:call)
+ end
+
def in_clustered_environment?
# Sidekiq doesn't fork
return false if Sidekiq.server?