diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-14 12:11:32 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-14 12:11:32 +0300 |
commit | 7b69070a7468c4a9b6fe0ed7fbf1b3f2b58434e0 (patch) | |
tree | 58e4ce0c7dbbe3442a707e53701ede51139f1c24 /lib/gitlab | |
parent | 5628b1ec1507638b47fda279b2a70b526a36613f (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab')
-rw-r--r-- | lib/gitlab/database/load_balancing/configuration.rb | 18 | ||||
-rw-r--r-- | lib/gitlab/sidekiq_queue.rb | 15 |
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 |