diff options
author | Andrew Newdigate <andrew@gitlab.com> | 2017-10-06 17:16:20 +0000 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2017-10-06 17:16:20 +0000 |
commit | 1ba3c747f3453d9411a63c287aeaf86d2419f8fa (patch) | |
tree | f889f5ba670c8854dfb53b173075ba4faab13a1d | |
parent | c762260612785edea6c5304002267eac7afe8805 (diff) | |
download | gitlab-ce-1ba3c747f3453d9411a63c287aeaf86d2419f8fa.tar.gz |
Gitaly feature flag metadata
-rw-r--r-- | changelogs/unreleased/gitaly_feature_flag_metadata.yml | 5 | ||||
-rw-r--r-- | lib/gitlab/gitaly_client.rb | 21 |
2 files changed, 24 insertions, 2 deletions
diff --git a/changelogs/unreleased/gitaly_feature_flag_metadata.yml b/changelogs/unreleased/gitaly_feature_flag_metadata.yml new file mode 100644 index 00000000000..58e42ef9324 --- /dev/null +++ b/changelogs/unreleased/gitaly_feature_flag_metadata.yml @@ -0,0 +1,5 @@ +--- +title: Add client and call site metadata to Gitaly calls for better traceability +merge_request: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/14332 +author: +type: added diff --git a/lib/gitlab/gitaly_client.rb b/lib/gitlab/gitaly_client.rb index 87b300dcf7e..cf36106e23d 100644 --- a/lib/gitlab/gitaly_client.rb +++ b/lib/gitlab/gitaly_client.rb @@ -28,6 +28,7 @@ module Gitlab SERVER_VERSION_FILE = 'GITALY_SERVER_VERSION'.freeze MAXIMUM_GITALY_CALLS = 30 + CLIENT_NAME = (Sidekiq.server? ? 'gitlab-sidekiq' : 'gitlab-web').freeze MUTEX = Mutex.new private_constant :MUTEX @@ -79,7 +80,16 @@ module Gitlab def self.request_metadata(storage) encoded_token = Base64.strict_encode64(token(storage).to_s) - { metadata: { 'authorization' => "Bearer #{encoded_token}" } } + metadata = { + 'authorization' => "Bearer #{encoded_token}", + 'client_name' => CLIENT_NAME + } + + feature_stack = Thread.current[:gitaly_feature_stack] + feature = feature_stack && feature_stack[0] + metadata['call_site'] = feature.to_s if feature + + { metadata: metadata } end def self.token(storage) @@ -137,7 +147,14 @@ module Gitlab Gitlab::Metrics.measure(metric_name) do # Some migrate calls wrap other migrate calls allow_n_plus_1_calls do - yield is_enabled + feature_stack = Thread.current[:gitaly_feature_stack] ||= [] + feature_stack.unshift(feature) + begin + yield is_enabled + ensure + feature_stack.shift + Thread.current[:gitaly_feature_stack] = nil if feature_stack.empty? + end end end end |