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-09-14 12:11:32 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-09-14 12:11:32 +0300
commit7b69070a7468c4a9b6fe0ed7fbf1b3f2b58434e0 (patch)
tree58e4ce0c7dbbe3442a707e53701ede51139f1c24 /lib/gitlab
parent5628b1ec1507638b47fda279b2a70b526a36613f (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab')
-rw-r--r--lib/gitlab/database/load_balancing/configuration.rb18
-rw-r--r--lib/gitlab/sidekiq_queue.rb15
2 files changed, 25 insertions, 8 deletions
diff --git a/lib/gitlab/database/load_balancing/configuration.rb b/lib/gitlab/database/load_balancing/configuration.rb
index c874825c98a..238f55fd98e 100644
--- a/lib/gitlab/database/load_balancing/configuration.rb
+++ b/lib/gitlab/database/load_balancing/configuration.rb
@@ -7,7 +7,7 @@ module Gitlab
class Configuration
attr_accessor :hosts, :max_replication_difference,
:max_replication_lag_time, :replica_check_interval,
- :service_discovery, :pool_size, :model
+ :service_discovery, :model
# Creates a configuration object for the given ActiveRecord model.
def self.for_model(model)
@@ -15,10 +15,6 @@ module Gitlab
lb_cfg = cfg[:load_balancing] || {}
config = new(model)
- if (size = cfg[:pool])
- config.pool_size = size
- end
-
if (diff = lb_cfg[:max_replication_difference])
config.max_replication_difference = diff
end
@@ -54,7 +50,6 @@ module Gitlab
@replica_check_interval = 60.0
@model = model
@hosts = hosts
- @pool_size = Database.default_pool_size
@service_discovery = {
nameserver: 'localhost',
port: 8600,
@@ -66,6 +61,17 @@ module Gitlab
}
end
+ def pool_size
+ # The pool size may change when booting up GitLab, as GitLab enforces
+ # a certain number of threads. If a Configuration is memoized, this
+ # can lead to incorrect pool sizes.
+ #
+ # To support this scenario, we always attempt to read the pool size
+ # from the model's configuration.
+ @model.connection_db_config.configuration_hash[:pool] ||
+ Database.default_pool_size
+ end
+
def load_balancing_enabled?
hosts.any? || service_discovery_enabled?
end
diff --git a/lib/gitlab/sidekiq_queue.rb b/lib/gitlab/sidekiq_queue.rb
index eb3a8e3d497..67a9d8120d8 100644
--- a/lib/gitlab/sidekiq_queue.rb
+++ b/lib/gitlab/sidekiq_queue.rb
@@ -7,6 +7,9 @@ module Gitlab
NoMetadataError = Class.new(StandardError)
InvalidQueueError = Class.new(StandardError)
+ WORKER_KEY = 'worker_class'
+ ALLOWED_KEYS = Gitlab::ApplicationContext::KNOWN_KEYS + [WORKER_KEY]
+
attr_reader :queue_name
def initialize(queue_name)
@@ -21,8 +24,8 @@ module Gitlab
job_search_metadata =
search_metadata
.stringify_keys
- .slice(*Gitlab::ApplicationContext::KNOWN_KEYS)
- .transform_keys { |key| "meta.#{key}" }
+ .slice(*ALLOWED_KEYS)
+ .transform_keys(&method(:transform_key))
.compact
raise NoMetadataError if job_search_metadata.empty?
@@ -49,6 +52,14 @@ module Gitlab
private
+ def transform_key(key)
+ if Gitlab::ApplicationContext::KNOWN_KEYS.include?(key)
+ "meta.#{key}"
+ elsif key == WORKER_KEY
+ 'class'
+ end
+ end
+
def queue
strong_memoize(:queue) do
# Sidekiq::Queue.new always returns a queue, even if it doesn't