diff options
author | Stan Hu <stanhu@gmail.com> | 2018-01-22 02:34:09 +0300 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2018-01-25 02:47:27 +0300 |
commit | 867126130946a9d3c3da7ff8e64b59b14da13599 (patch) | |
tree | b67bf98dce78a0b953e63e84ff95a24c60b8af15 /lib/gitlab/gitaly_client.rb | |
parent | 44728e0527bc7c5cf982be2fbbd26e24a79e5d8f (diff) |
Add a gRPC health check to ensure Gitaly is up
This will enable Geo to skip shards that not operational.
Relates to gitlab-org/gitlab-ee#4329
Diffstat (limited to 'lib/gitlab/gitaly_client.rb')
-rw-r--r-- | lib/gitlab/gitaly_client.rb | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/lib/gitlab/gitaly_client.rb b/lib/gitlab/gitaly_client.rb index 4507ea923b4..6bd256f57c7 100644 --- a/lib/gitlab/gitaly_client.rb +++ b/lib/gitlab/gitaly_client.rb @@ -1,6 +1,8 @@ require 'base64' require 'gitaly' +require 'grpc/health/v1/health_pb' +require 'grpc/health/v1/health_services_pb' module Gitlab module GitalyClient @@ -69,14 +71,27 @@ module Gitlab @stubs ||= {} @stubs[storage] ||= {} @stubs[storage][name] ||= begin - klass = Gitaly.const_get(name.to_s.camelcase.to_sym).const_get(:Stub) - addr = address(storage) - addr = addr.sub(%r{^tcp://}, '') if URI(addr).scheme == 'tcp' + klass = stub_class(name) + addr = stub_address(storage) klass.new(addr, :this_channel_is_insecure) end end end + def self.stub_class(name) + if name == :health_check + Grpc::Health::V1::Health::Stub + else + Gitaly.const_get(name.to_s.camelcase.to_sym).const_get(:Stub) + end + end + + def self.stub_address(storage) + addr = address(storage) + addr = addr.sub(%r{^tcp://}, '') if URI(addr).scheme == 'tcp' + addr + end + def self.clear_stubs! MUTEX.synchronize do @stubs = nil |