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>2020-01-13 18:07:53 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-13 18:07:53 +0300
commita5ab3467a705b62911feacc3cf627fdbb00aa198 (patch)
tree65143ce13405efccb922fc428624ad57c38b6efa /lib/gitlab/gitaly_client.rb
parenteb30dd6e28f6fc9eb8021d205f6ed84511f001e2 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/gitaly_client.rb')
-rw-r--r--lib/gitlab/gitaly_client.rb23
1 files changed, 20 insertions, 3 deletions
diff --git a/lib/gitlab/gitaly_client.rb b/lib/gitlab/gitaly_client.rb
index 9636e75aba1..262a1ef653f 100644
--- a/lib/gitlab/gitaly_client.rb
+++ b/lib/gitlab/gitaly_client.rb
@@ -160,6 +160,7 @@ module Gitlab
def self.execute(storage, service, rpc, request, remote_storage:, timeout:)
enforce_gitaly_request_limits(:call)
+ Gitlab::RequestContext.instance.ensure_deadline_not_exceeded!
kwargs = request_kwargs(storage, timeout: timeout.to_f, remote_storage: remote_storage)
kwargs = yield(kwargs) if block_given?
@@ -234,12 +235,28 @@ module Gitlab
metadata['gitaly-session-id'] = session_id
metadata.merge!(Feature::Gitaly.server_feature_flags)
- result = { metadata: metadata }
+ deadline_info = request_deadline(timeout)
+ metadata.merge!(deadline_info.slice(:deadline_type))
- result[:deadline] = real_time + timeout if timeout > 0
- result
+ { metadata: metadata, deadline: deadline_info[:deadline] }
end
+ def self.request_deadline(timeout)
+ # timeout being 0 means the request is allowed to run indefinitely.
+ # We can't allow that inside a request, but this won't count towards Gitaly
+ # error budgets
+ regular_deadline = real_time.to_i + timeout if timeout > 0
+
+ return { deadline: regular_deadline } if Sidekiq.server?
+ return { deadline: regular_deadline } unless Gitlab::RequestContext.instance.request_deadline
+
+ limited_deadline = [regular_deadline, Gitlab::RequestContext.instance.request_deadline].compact.min
+ limited = limited_deadline < regular_deadline
+
+ { deadline: limited_deadline, deadline_type: limited ? "limited" : "regular" }
+ end
+ private_class_method :request_deadline
+
def self.session_id
Gitlab::SafeRequestStore[:gitaly_session_id] ||= SecureRandom.uuid
end