65840591cd
Prior to this change, health checks checked for writeability of the NFS shards. Given we're moving away from that, this patch extends the checks for Gitaly to check for read and writeability. Potentially some dashboards will break, as over time these metrics will no longer appear as Prometheus doesn't get the data anymore. Observability in the circuit breaker will be reduced, but its not expected to be turned on and the circuit breaker is being removed soon too. Closes https://gitlab.com/gitlab-org/gitaly/issues/1218
59 lines
1.2 KiB
Ruby
59 lines
1.2 KiB
Ruby
module Gitaly
|
|
class Server
|
|
def self.all
|
|
Gitlab.config.repositories.storages.keys.map { |s| Gitaly::Server.new(s) }
|
|
end
|
|
|
|
attr_reader :storage
|
|
|
|
def initialize(storage)
|
|
@storage = storage
|
|
end
|
|
|
|
def server_version
|
|
info.server_version
|
|
end
|
|
|
|
def git_binary_version
|
|
info.git_version
|
|
end
|
|
|
|
def up_to_date?
|
|
server_version == Gitlab::GitalyClient.expected_server_version
|
|
end
|
|
|
|
def read_writeable?
|
|
readable? && writeable?
|
|
end
|
|
|
|
def readable?
|
|
storage_status&.readable
|
|
end
|
|
|
|
def writeable?
|
|
storage_status&.writeable
|
|
end
|
|
|
|
def address
|
|
Gitlab::GitalyClient.address(@storage)
|
|
rescue RuntimeError => e
|
|
"Error getting the address: #{e.message}"
|
|
end
|
|
|
|
private
|
|
|
|
def storage_status
|
|
@storage_status ||= info.storage_statuses.find { |s| s.storage_name == storage }
|
|
end
|
|
|
|
def info
|
|
@info ||=
|
|
begin
|
|
Gitlab::GitalyClient::ServerService.new(@storage).info
|
|
rescue GRPC::Unavailable, GRPC::GRPC::DeadlineExceeded
|
|
# This will show the server as being out of date
|
|
Gitaly::ServerInfoResponse.new(git_version: '', server_version: '', storage_statuses: [])
|
|
end
|
|
end
|
|
end
|
|
end
|