diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-16 03:08:47 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-16 03:08:47 +0000 |
commit | 08ed6a867b690a04fe7a74c9ba697cf18f6107d7 (patch) | |
tree | 9561a9aeee9a57cec168b143a76e6f65fd92ae0b /config | |
parent | b0f27742e78a4aa4208c271536b6b9d84c53b49e (diff) | |
download | gitlab-ce-08ed6a867b690a04fe7a74c9ba697cf18f6107d7.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'config')
-rw-r--r-- | config/initializers/database_config.rb | 42 | ||||
-rw-r--r-- | config/initializers/sidekiq.rb | 13 |
2 files changed, 32 insertions, 23 deletions
diff --git a/config/initializers/database_config.rb b/config/initializers/database_config.rb index 509f04c9b02..b5490fc4719 100644 --- a/config/initializers/database_config.rb +++ b/config/initializers/database_config.rb @@ -1,18 +1,40 @@ # frozen_string_literal: true -# when running on puma, scale connection pool size with the number -# of threads per worker process -if Gitlab::Runtime.puma? +def log_pool_size(db, previous_pool_size, current_pool_size) + log_message = ["#{db} connection pool size: #{current_pool_size}"] + + if previous_pool_size && current_pool_size > previous_pool_size + log_message << "(increased from #{previous_pool_size} to match thread count)" + end + + Gitlab::AppLogger.debug(log_message.join(' ')) +end + +# When running on multi-threaded runtimes like Puma or Sidekiq, +# set the number of threads per process as the minimum DB connection pool size. +# This is to avoid connectivity issues as was documented here: +# https://github.com/rails/rails/pull/23057 +if Gitlab::Runtime.multi_threaded? + max_threads = Gitlab::Runtime.max_threads db_config = Gitlab::Database.config || Rails.application.config.database_configuration[Rails.env] - puma_options = Puma.cli_config.options + previous_db_pool_size = db_config['pool'] - # We use either the maximum number of threads per worker process, or - # the user specified value, whichever is larger. - desired_pool_size = [db_config['pool'].to_i, puma_options[:max_threads]].max + db_config['pool'] = [db_config['pool'].to_i, max_threads].max - db_config['pool'] = desired_pool_size - - # recreate the connection pool from the new config ActiveRecord::Base.establish_connection(db_config) + + current_db_pool_size = ActiveRecord::Base.connection.pool.size + + log_pool_size('DB', previous_db_pool_size, current_db_pool_size) + + Gitlab.ee do + if Gitlab::Runtime.sidekiq? && Gitlab::Geo.geo_database_configured? + previous_geo_db_pool_size = Rails.configuration.geo_database['pool'] + Rails.configuration.geo_database['pool'] = max_threads + Geo::TrackingBase.establish_connection(Rails.configuration.geo_database) + current_geo_db_pool_size = Geo::TrackingBase.connection_pool.size + log_pool_size('Geo DB', previous_geo_db_pool_size, current_geo_db_pool_size) + end + end end diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb index b4a1e0da41a..b90a04a19e1 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -88,23 +88,10 @@ Sidekiq.configure_server do |config| Gitlab::SidekiqVersioning.install! - db_config = Gitlab::Database.config || - Rails.application.config.database_configuration[Rails.env] - db_config['pool'] = Sidekiq.options[:concurrency] - ActiveRecord::Base.establish_connection(db_config) - Rails.logger.debug("Connection Pool size for Sidekiq Server is now: #{ActiveRecord::Base.connection.pool.instance_variable_get('@size')}") # rubocop:disable Gitlab/RailsLogger - Gitlab.ee do Gitlab::Mirror.configure_cron_job! Gitlab::Geo.configure_cron_jobs! - - if Gitlab::Geo.geo_database_configured? - Rails.configuration.geo_database['pool'] = Sidekiq.options[:concurrency] - Geo::TrackingBase.establish_connection(Rails.configuration.geo_database) - - Rails.logger.debug("Connection Pool size for Sidekiq Server is now: #{Geo::TrackingBase.connection_pool.size} (Geo tracking database)") # rubocop:disable Gitlab/RailsLogger - end end # Avoid autoload issue such as 'Mail::Parsers::AddressStruct' |