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>2021-03-16 21:18:33 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-03-16 21:18:33 +0300
commitf64a639bcfa1fc2bc89ca7db268f594306edfd7c (patch)
treea2c3c2ebcc3b45e596949db485d6ed18ffaacfa1 /lib/gitlab/query_limiting
parentbfbc3e0d6583ea1a91f627528bedc3d65ba4b10f (diff)
Add latest changes from gitlab-org/gitlab@13-10-stable-eev13.10.0-rc40
Diffstat (limited to 'lib/gitlab/query_limiting')
-rw-r--r--lib/gitlab/query_limiting/active_support_subscriber.rb7
-rw-r--r--lib/gitlab/query_limiting/transaction.rb11
2 files changed, 14 insertions, 4 deletions
diff --git a/lib/gitlab/query_limiting/active_support_subscriber.rb b/lib/gitlab/query_limiting/active_support_subscriber.rb
index 065862174bb..138fae7b641 100644
--- a/lib/gitlab/query_limiting/active_support_subscriber.rb
+++ b/lib/gitlab/query_limiting/active_support_subscriber.rb
@@ -6,9 +6,10 @@ module Gitlab
attach_to :active_record
def sql(event)
- unless event.payload.fetch(:cached, event.payload[:name] == 'CACHE')
- Transaction.current&.increment
- end
+ return if !Transaction.current || event.payload.fetch(:cached, event.payload[:name] == 'CACHE')
+
+ Transaction.current.increment
+ Transaction.current.executed_sql(event.payload[:sql])
end
end
end
diff --git a/lib/gitlab/query_limiting/transaction.rb b/lib/gitlab/query_limiting/transaction.rb
index e8fad067fa6..196072dddda 100644
--- a/lib/gitlab/query_limiting/transaction.rb
+++ b/lib/gitlab/query_limiting/transaction.rb
@@ -15,6 +15,7 @@ module Gitlab
# the sake of keeping things simple we hardcode this value here, it's not
# supposed to be changed very often anyway.
THRESHOLD = 100
+ LOG_THRESHOLD = THRESHOLD * 1.5
# Error that is raised whenever exceeding the maximum number of queries.
ThresholdExceededError = Class.new(StandardError)
@@ -45,6 +46,7 @@ module Gitlab
@action = nil
@count = 0
@whitelisted = false
+ @sql_executed = []
end
# Sends a notification based on the number of executed SQL queries.
@@ -60,6 +62,10 @@ module Gitlab
@count += 1 unless whitelisted
end
+ def executed_sql(sql)
+ @sql_executed << sql if @count <= LOG_THRESHOLD
+ end
+
def raise_error?
Rails.env.test?
end
@@ -71,8 +77,11 @@ module Gitlab
def error_message
header = 'Too many SQL queries were executed'
header = "#{header} in #{action}" if action
+ msg = "a maximum of #{THRESHOLD} is allowed but #{count} SQL queries were executed"
+ log = @sql_executed.each_with_index.map { |sql, i| "#{i}: #{sql}" }.join("\n").presence
+ ellipsis = '...' if @count > LOG_THRESHOLD
- "#{header}: a maximum of #{THRESHOLD} is allowed but #{count} SQL queries were executed"
+ ["#{header}: #{msg}", log, ellipsis].compact.join("\n")
end
end
end