| ... | ... | @@ -31,10 +31,6 @@ module Gitlab |
|
|
|
MAXIMUM_GITALY_CALLS = 30
|
|
|
|
CLIENT_NAME = (Sidekiq.server? ? 'gitlab-sidekiq' : 'gitlab-web').freeze
|
|
|
|
|
|
|
|
SERVER_FEATURE_CATFILE_CACHE = 'catfile-cache'.freeze
|
|
|
|
# Server feature flags should use '_' to separate words.
|
|
|
|
SERVER_FEATURE_FLAGS = [SERVER_FEATURE_CATFILE_CACHE].freeze
|
|
|
|
|
|
|
|
MUTEX = Mutex.new
|
|
|
|
|
|
|
|
define_histogram :gitaly_controller_action_duration_seconds do
|
| ... | ... | @@ -223,9 +219,9 @@ module Gitlab |
|
|
|
metadata['call_site'] = feature.to_s if feature
|
|
|
|
metadata['gitaly-servers'] = address_metadata(remote_storage) if remote_storage
|
|
|
|
metadata['x-gitlab-correlation-id'] = Labkit::Correlation::CorrelationId.current_id if Labkit::Correlation::CorrelationId.current_id
|
|
|
|
metadata['gitaly-session-id'] = session_id if feature_enabled?(SERVER_FEATURE_CATFILE_CACHE)
|
|
|
|
metadata['gitaly-session-id'] = session_id if Feature::Gitaly.enabled?(Feature::Gitaly::CATFILE_CACHE)
|
|
|
|
|
|
|
|
metadata.merge!(server_feature_flags)
|
|
|
|
metadata.merge!(Feature::Gitaly.server_feature_flags)
|
|
|
|
|
|
|
|
result = { metadata: metadata }
|
|
|
|
|
| ... | ... | @@ -244,12 +240,6 @@ module Gitlab |
|
|
|
Gitlab::SafeRequestStore[:gitaly_session_id] ||= SecureRandom.uuid
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.server_feature_flags
|
|
|
|
SERVER_FEATURE_FLAGS.map do |f|
|
|
|
|
["gitaly-feature-#{f.tr('_', '-')}", feature_enabled?(f).to_s]
|
|
|
|
end.to_h
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.token(storage)
|
|
|
|
params = Gitlab.config.repositories.storages[storage]
|
|
|
|
raise "storage not found: #{storage.inspect}" if params.nil?
|
| ... | ... | @@ -257,12 +247,6 @@ module Gitlab |
|
|
|
params['gitaly_token'].presence || Gitlab.config.gitaly['token']
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.feature_enabled?(feature_name)
|
|
|
|
Feature::FlipperFeature.table_exists? && Feature.enabled?("gitaly_#{feature_name}")
|
|
|
|
rescue ActiveRecord::NoDatabaseError
|
|
|
|
false
|
|
|
|
end
|
|
|
|
|
|
|
|
# Ensures that Gitaly is not being abuse through n+1 misuse etc
|
|
|
|
def self.enforce_gitaly_request_limits(call_site)
|
|
|
|
# Only count limits in request-response environments (not sidekiq for example)
|
| ... | ... | @@ -295,7 +279,7 @@ module Gitlab |
|
|
|
# check if the limit is being exceeded while testing in those environments
|
|
|
|
# In that case we can use a feature flag to indicate that we do want to
|
|
|
|
# enforce request limits.
|
|
|
|
return true if feature_enabled?('enforce_requests_limits')
|
|
|
|
return true if Feature::Gitaly.enabled?('enforce_requests_limits')
|
|
|
|
|
|
|
|
!(Rails.env.production? || ENV["GITALY_DISABLE_REQUEST_LIMITS"])
|
|
|
|
end
|
| ... | ... | |
| ... | ... | |