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/health_checks
parent84a0e65ac88c7a3db86a0e4347606ba093490bef (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/health_checks')
-rw-r--r--lib/gitlab/health_checks/master_check.rb66
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/gitlab/health_checks/master_check.rb b/lib/gitlab/health_checks/master_check.rb
new file mode 100644
index 00000000000..057bce84ddd
--- /dev/null
+++ b/lib/gitlab/health_checks/master_check.rb
@@ -0,0 +1,66 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module HealthChecks
+ # This check is registered on master,
+ # and validated by worker
+ class MasterCheck
+ extend SimpleAbstractCheck
+
+ class << self
+ def register_master
+ # when we fork, we pass the read pipe to child
+ # child can then react on whether the other end
+ # of pipe is still available
+ @pipe_read, @pipe_write = IO.pipe
+ end
+
+ def finish_master
+ close_read
+ close_write
+ end
+
+ def register_worker
+ # fork needs to close the pipe
+ close_write
+ end
+
+ private
+
+ def close_read
+ @pipe_read&.close
+ @pipe_read = nil
+ end
+
+ def close_write
+ @pipe_write&.close
+ @pipe_write = nil
+ end
+
+ def metric_prefix
+ 'master_check'
+ end
+
+ def successful?(result)
+ result
+ end
+
+ def check
+ # the lack of pipe is a legitimate failure of check
+ return false unless @pipe_read
+
+ @pipe_read.read_nonblock(1)
+
+ true
+ rescue IO::EAGAINWaitReadable
+ # if it is blocked, it means that the pipe is still open
+ # and there's no data waiting on it
+ true
+ rescue EOFError
+ # the pipe is closed
+ false
+ end
+ end
+ end
+ end
+end