Module: Gitlab::QueryLimiting

Defined in:
lib/gitlab/query_limiting.rb,
lib/gitlab/query_limiting/middleware.rb,
lib/gitlab/query_limiting/transaction.rb,
lib/gitlab/query_limiting/sidekiq_middleware.rb,
lib/gitlab/query_limiting/active_support_subscriber.rb
more...

Defined Under Namespace

Classes: ActiveSupportSubscriber, Middleware, SidekiqMiddleware, Transaction

Class Method Summary collapse

Class Method Details

.disable!(issue_url, new_threshold: 200) ⇒ Object

Allows the current request to execute a higher number of SQL queries.

This method should only be used when there’s a corresponding issue to reduce the number of queries.

The issue URL is only meant to push developers into creating an issue instead of blindly disabling for offending blocks of code.

The new_threshold is so that we don’t allow unlimited number of SQL queries while the issue is being fixed.

Raises:

  • (ArgumentError)
[View source] [View on GitHub]

31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/gitlab/query_limiting.rb', line 31

def self.disable!(issue_url, new_threshold: 200)
  raise ArgumentError, 'new_threshold cannot exceed 2_000' unless new_threshold < 2_000

  unless issue_url.start_with?('https://')
    raise(
      ArgumentError,
      'You must provide a valid issue URL in order to allow a block of code'
    )
  end

  Gitlab::SafeRequestStore[:query_limiting_override_threshold] = new_threshold
end

.enable!Object

Enables query limiting for the request.

[View source] [View on GitHub]

45
46
47
# File 'lib/gitlab/query_limiting.rb', line 45

def self.enable!
  Gitlab::SafeRequestStore[:query_limiting_override_threshold] = nil
end

.enabled?Boolean

Returns:

  • (Boolean)
[View source] [View on GitHub]

13
14
15
# File 'lib/gitlab/query_limiting.rb', line 13

def self.enabled?
  enabled_for_env?
end

.enabled_for_env?Boolean

Returns true if we should enable tracking of query counts.

This is only enabled in development and test to ensure we don’t produce any errors that users of other environments can’t do anything about themselves.

Returns:

  • (Boolean)
[View source] [View on GitHub]

9
10
11
# File 'lib/gitlab/query_limiting.rb', line 9

def self.enabled_for_env?
  Rails.env.development? || Rails.env.test?
end

.thresholdObject

[View source] [View on GitHub]

17
18
19
# File 'lib/gitlab/query_limiting.rb', line 17

def self.threshold
  Gitlab::SafeRequestStore[:query_limiting_override_threshold]
end