diff options
Diffstat (limited to 'config/initializers')
-rw-r--r-- | config/initializers/01_secret_token.rb | 2 | ||||
-rw-r--r-- | config/initializers/1_settings.rb | 24 | ||||
-rw-r--r-- | config/initializers/7_prometheus_metrics.rb | 11 | ||||
-rw-r--r-- | config/initializers/8_devise.rb | 7 | ||||
-rw-r--r-- | config/initializers/action_cable.rb | 10 | ||||
-rw-r--r-- | config/initializers/actionpack_generate_old_csrf_token.rb | 33 | ||||
-rw-r--r-- | config/initializers/bullet.rb | 11 | ||||
-rw-r--r-- | config/initializers/database_config.rb | 2 | ||||
-rw-r--r-- | config/initializers/doorkeeper.rb | 5 | ||||
-rw-r--r-- | config/initializers/fill_shards.rb | 5 | ||||
-rw-r--r-- | config/initializers/google_api_client.rb | 19 | ||||
-rw-r--r-- | config/initializers/grape_validators.rb | 1 | ||||
-rw-r--r-- | config/initializers/kaminari_active_record_relation_methods_with_limit.rb | 8 | ||||
-rw-r--r-- | config/initializers/lograge.rb | 6 | ||||
-rw-r--r-- | config/initializers/peek.rb | 2 | ||||
-rw-r--r-- | config/initializers/rack_attack.rb (renamed from config/initializers/rack_attack_new.rb) | 0 | ||||
-rw-r--r-- | config/initializers/zz_metrics.rb | 2 |
17 files changed, 101 insertions, 47 deletions
diff --git a/config/initializers/01_secret_token.rb b/config/initializers/01_secret_token.rb index e3fefeab81c..8b96727a2a1 100644 --- a/config/initializers/01_secret_token.rb +++ b/config/initializers/01_secret_token.rb @@ -61,6 +61,8 @@ def generate_new_rsa_private_key end def warn_missing_secret(secret) + return if Rails.env.test? + warn "Missing Rails.application.secrets.#{secret} for #{Rails.env} environment. The secret will be generated and stored in config/secrets.yml." end diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index c0cd491547a..9d9f24183d5 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -451,9 +451,12 @@ Settings.cron_jobs['trending_projects_worker']['job_class'] = 'TrendingProjectsW Settings.cron_jobs['remove_unreferenced_lfs_objects_worker'] ||= Settingslogic.new({}) Settings.cron_jobs['remove_unreferenced_lfs_objects_worker']['cron'] ||= '20 0 * * *' Settings.cron_jobs['remove_unreferenced_lfs_objects_worker']['job_class'] = 'RemoveUnreferencedLfsObjectsWorker' -Settings.cron_jobs['stuck_import_jobs_worker'] ||= Settingslogic.new({}) -Settings.cron_jobs['stuck_import_jobs_worker']['cron'] ||= '15 * * * *' -Settings.cron_jobs['stuck_import_jobs_worker']['job_class'] = 'StuckImportJobsWorker' +Settings.cron_jobs['import_stuck_project_import_jobs'] ||= Settingslogic.new({}) +Settings.cron_jobs['import_stuck_project_import_jobs']['cron'] ||= '15 * * * *' +Settings.cron_jobs['import_stuck_project_import_jobs']['job_class'] = 'Gitlab::Import::StuckProjectImportJobsWorker' +Settings.cron_jobs['jira_import_stuck_jira_import_jobs'] ||= Settingslogic.new({}) +Settings.cron_jobs['jira_import_stuck_jira_import_jobs']['cron'] ||= '* 0/15 * * *' +Settings.cron_jobs['jira_import_stuck_jira_import_jobs']['job_class'] = 'Gitlab::JiraImport::StuckJiraImportJobsWorker' Settings.cron_jobs['stuck_export_jobs_worker'] ||= Settingslogic.new({}) Settings.cron_jobs['stuck_export_jobs_worker']['cron'] ||= '30 * * * *' Settings.cron_jobs['stuck_export_jobs_worker']['job_class'] = 'StuckExportJobsWorker' @@ -478,6 +481,9 @@ Settings.cron_jobs['issue_due_scheduler_worker']['job_class'] = 'IssueDueSchedul Settings.cron_jobs['prune_web_hook_logs_worker'] ||= Settingslogic.new({}) Settings.cron_jobs['prune_web_hook_logs_worker']['cron'] ||= '0 */1 * * *' Settings.cron_jobs['prune_web_hook_logs_worker']['job_class'] = 'PruneWebHookLogsWorker' +Settings.cron_jobs['metrics_dashboard_schedule_annotations_prune_worker'] ||= Settingslogic.new({}) +Settings.cron_jobs['metrics_dashboard_schedule_annotations_prune_worker']['cron'] ||= '0 1 * * *' +Settings.cron_jobs['metrics_dashboard_schedule_annotations_prune_worker']['job_class'] = 'Metrics::Dashboard::ScheduleAnnotationsPruneWorker' Settings.cron_jobs['schedule_migrate_external_diffs_worker'] ||= Settingslogic.new({}) Settings.cron_jobs['schedule_migrate_external_diffs_worker']['cron'] ||= '15 * * * *' Settings.cron_jobs['schedule_migrate_external_diffs_worker']['job_class'] = 'ScheduleMigrateExternalDiffsWorker' @@ -507,6 +513,9 @@ Gitlab.ee do Settings.cron_jobs['geo_file_download_dispatch_worker'] ||= Settingslogic.new({}) Settings.cron_jobs['geo_file_download_dispatch_worker']['cron'] ||= '*/1 * * * *' Settings.cron_jobs['geo_file_download_dispatch_worker']['job_class'] ||= 'Geo::FileDownloadDispatchWorker' + Settings.cron_jobs['geo_registry_sync_worker'] ||= Settingslogic.new({}) + Settings.cron_jobs['geo_registry_sync_worker']['cron'] ||= '*/1 * * * *' + Settings.cron_jobs['geo_registry_sync_worker']['job_class'] ||= 'Geo::RegistrySyncWorker' Settings.cron_jobs['geo_metrics_update_worker'] ||= Settingslogic.new({}) Settings.cron_jobs['geo_metrics_update_worker']['cron'] ||= '*/1 * * * *' Settings.cron_jobs['geo_metrics_update_worker']['job_class'] ||= 'Geo::MetricsUpdateWorker' @@ -552,9 +561,15 @@ Gitlab.ee do Settings.cron_jobs['elastic_index_bulk_cron_worker'] ||= Settingslogic.new({}) Settings.cron_jobs['elastic_index_bulk_cron_worker']['cron'] ||= '*/1 * * * *' Settings.cron_jobs['elastic_index_bulk_cron_worker']['job_class'] ||= 'ElasticIndexBulkCronWorker' + Settings.cron_jobs['elastic_index_initial_bulk_cron_worker'] ||= Settingslogic.new({}) + Settings.cron_jobs['elastic_index_initial_bulk_cron_worker']['cron'] ||= '*/1 * * * *' + Settings.cron_jobs['elastic_index_initial_bulk_cron_worker']['job_class'] ||= 'ElasticIndexInitialBulkCronWorker' Settings.cron_jobs['sync_seat_link_worker'] ||= Settingslogic.new({}) Settings.cron_jobs['sync_seat_link_worker']['cron'] ||= "#{rand(60)} 0 * * *" Settings.cron_jobs['sync_seat_link_worker']['job_class'] = 'SyncSeatLinkWorker' + Settings.cron_jobs['web_application_firewall_metrics_worker'] ||= Settingslogic.new({}) + Settings.cron_jobs['web_application_firewall_metrics_worker']['cron'] ||= '0 1 * * 0' + Settings.cron_jobs['web_application_firewall_metrics_worker']['job_class'] = 'IngressModsecurityCounterMetricsWorker' end # @@ -728,9 +743,6 @@ Settings.action_cable['worker_pool_size'] ||= 4 Settings['monitoring'] ||= Settingslogic.new({}) Settings.monitoring['ip_whitelist'] ||= ['127.0.0.1/8'] Settings.monitoring['unicorn_sampler_interval'] ||= 10 -Settings.monitoring['puma_sampler_interval'] ||= 5 -Settings.monitoring['ruby_sampler_interval'] ||= 60 -Settings.monitoring['global_search_sampler_interval'] ||= 60 Settings.monitoring['sidekiq_exporter'] ||= Settingslogic.new({}) Settings.monitoring.sidekiq_exporter['enabled'] ||= false Settings.monitoring.sidekiq_exporter['address'] ||= 'localhost' diff --git a/config/initializers/7_prometheus_metrics.rb b/config/initializers/7_prometheus_metrics.rb index 267a1f0b1a5..bb89850892e 100644 --- a/config/initializers/7_prometheus_metrics.rb +++ b/config/initializers/7_prometheus_metrics.rb @@ -42,14 +42,11 @@ if !Rails.env.test? && Gitlab::Metrics.prometheus_metrics_enabled? Gitlab::Cluster::LifecycleEvents.on_worker_start do defined?(::Prometheus::Client.reinitialize_on_pid_change) && Prometheus::Client.reinitialize_on_pid_change - Gitlab::Metrics::Samplers::RubySampler.initialize_instance(Settings.monitoring.ruby_sampler_interval).start - - if Gitlab::Utils.to_boolean(ENV['ENABLE_DATABASE_CONNECTION_POOL_METRICS']) - Gitlab::Metrics::Samplers::DatabaseSampler.initialize_instance(Gitlab::Metrics::Samplers::DatabaseSampler::SAMPLING_INTERVAL_SECONDS).start - end + Gitlab::Metrics::Samplers::RubySampler.initialize_instance.start + Gitlab::Metrics::Samplers::DatabaseSampler.initialize_instance.start if Gitlab.ee? && Gitlab::Runtime.sidekiq? - Gitlab::Metrics::Samplers::GlobalSearchSampler.instance(Settings.monitoring.global_search_sampler_interval).start + Gitlab::Metrics::Samplers::GlobalSearchSampler.instance.start end rescue IOError => e Gitlab::ErrorTracking.track_exception(e) @@ -62,7 +59,7 @@ if !Rails.env.test? && Gitlab::Metrics.prometheus_metrics_enabled? if Gitlab::Runtime.unicorn? Gitlab::Metrics::Samplers::UnicornSampler.instance(Settings.monitoring.unicorn_sampler_interval).start elsif Gitlab::Runtime.puma? - Gitlab::Metrics::Samplers::PumaSampler.instance(Settings.monitoring.puma_sampler_interval).start + Gitlab::Metrics::Samplers::PumaSampler.instance.start end Gitlab::Metrics.gauge(:deployments, 'GitLab Version', {}, :max).set({ version: Gitlab::VERSION }, 1) diff --git a/config/initializers/8_devise.rb b/config/initializers/8_devise.rb index 3daddb10b29..2be6e535fee 100644 --- a/config/initializers/8_devise.rb +++ b/config/initializers/8_devise.rb @@ -6,6 +6,11 @@ Devise.setup do |config| manager.default_strategies(scope: :user).unshift :two_factor_backupable end + # This is the default. This makes it explicit that Devise loads routes + # before eager loading. Disabling this seems to cause an error loading + # grape-entity `expose` for some reason. + config.reload_routes = true + # ==> Mailer Configuration # Configure the class responsible to send e-mails. config.mailer = "DeviseMailer" @@ -102,7 +107,7 @@ Devise.setup do |config| # config.remember_across_browsers = true # If true, extends the user's remember period when remembered via cookie. - # config.extend_remember_period = false + config.extend_remember_period = true # Options to be passed to the created cookie. For instance, you can set # secure: true in order to force SSL only cookies. diff --git a/config/initializers/action_cable.rb b/config/initializers/action_cable.rb index eb44ff00d09..c549dd45ad9 100644 --- a/config/initializers/action_cable.rb +++ b/config/initializers/action_cable.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'action_cable/subscription_adapter/redis' + Rails.application.configure do # We only mount the ActionCable engine in tests where we run it in-app # For other environments, we run it on a standalone Puma server @@ -7,3 +9,11 @@ Rails.application.configure do config.action_cable.url = Gitlab::Utils.append_path(Gitlab.config.gitlab.relative_url_root, '/-/cable') config.action_cable.worker_pool_size = Gitlab.config.action_cable.worker_pool_size end + +# https://github.com/rails/rails/blob/bb5ac1623e8de08c1b7b62b1368758f0d3bb6379/actioncable/lib/action_cable/subscription_adapter/redis.rb#L18 +ActionCable::SubscriptionAdapter::Redis.redis_connector = lambda do |config| + args = config.except(:adapter, :channel_prefix) + .merge(instrumentation_class: ::Gitlab::Instrumentation::Redis::ActionCable) + + ::Redis.new(args) +end diff --git a/config/initializers/actionpack_generate_old_csrf_token.rb b/config/initializers/actionpack_generate_old_csrf_token.rb new file mode 100644 index 00000000000..6367a1d4d59 --- /dev/null +++ b/config/initializers/actionpack_generate_old_csrf_token.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module Gitlab + module RequestForgeryProtectionPatch + private + + # Patch to generate 6.0.3 tokens so that we do not have CSRF errors while + # rolling out 6.0.3.1. This enables GitLab to have a mix of 6.0.3 and + # 6.0.3.1 Rails servers + # + # 1. Deploy this patch with :global_csrf_token FF disabled. + # 2. Once all Rails servers are on 6.0.3.1, enable :global_csrf_token FF. + # 3. On GitLab 13.2, remove this patch + def masked_authenticity_token(session, form_options: {}) + action, method = form_options.values_at(:action, :method) + + raw_token = if per_form_csrf_tokens && action && method + action_path = normalize_action_path(action) + per_form_csrf_token(session, action_path, method) + else + if Feature.enabled?(:global_csrf_token) + global_csrf_token(session) + else + real_csrf_token(session) + end + end + + mask_token(raw_token) + end + end +end + +ActionController::Base.include Gitlab::RequestForgeryProtectionPatch diff --git a/config/initializers/bullet.rb b/config/initializers/bullet.rb index 0ade7109420..d1f72ca3ce7 100644 --- a/config/initializers/bullet.rb +++ b/config/initializers/bullet.rb @@ -1,10 +1,15 @@ -if defined?(Bullet) && ENV['ENABLE_BULLET'] +def bullet_enabled? + Gitlab::Utils.to_boolean(ENV['ENABLE_BULLET'].to_s) +end + +if defined?(Bullet) && (bullet_enabled? || Rails.env.development?) Rails.application.configure do config.after_initialize do Bullet.enable = true - Bullet.bullet_logger = true - Bullet.console = true + Bullet.bullet_logger = bullet_enabled? + Bullet.console = bullet_enabled? + Bullet.raise = Rails.env.test? end end diff --git a/config/initializers/database_config.rb b/config/initializers/database_config.rb index 52897ad549d..ce732677c74 100644 --- a/config/initializers/database_config.rb +++ b/config/initializers/database_config.rb @@ -30,7 +30,7 @@ if Gitlab::Runtime.multi_threaded? Rails.application.config.database_configuration[Rails.env] previous_db_pool_size = db_config['pool'] - db_config['pool'] = [db_config['pool'].to_i, max_threads].max + db_config['pool'] = [db_config['pool'].to_i, max_threads].max + ENV["DB_POOL_HEADROOM"].to_i ActiveRecord::Base.establish_connection(db_config) diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb index 4158bfec216..76e29fb6c02 100644 --- a/config/initializers/doorkeeper.rb +++ b/config/initializers/doorkeeper.rb @@ -106,10 +106,5 @@ Doorkeeper.configure do # WWW-Authenticate Realm (default "Doorkeeper"). # realm "Doorkeeper" - # Allow dynamic query parameters (disabled by default) - # Some applications require dynamic query parameters on their request_uri - # set to true if you want this to be allowed - # wildcard_redirect_uri false - base_controller '::Gitlab::BaseDoorkeeperController' end diff --git a/config/initializers/fill_shards.rb b/config/initializers/fill_shards.rb index 40a9a271953..90c0d63e4fe 100644 --- a/config/initializers/fill_shards.rb +++ b/config/initializers/fill_shards.rb @@ -1,8 +1,7 @@ -# The `table_exists?` check is needed because during our migration rollback testing, +# The explicit schema version check is needed because during our migration rollback testing, # `Shard.connected?` could be cached and return true even though the table doesn't exist return unless Shard.connected? -return unless Shard.table_exists? -return unless Shard.connection.index_exists?(:shards, :name, unique: true) +return unless ActiveRecord::Migrator.current_version >= 20190402150158 return if Gitlab::Database.read_only? Shard.populate! diff --git a/config/initializers/google_api_client.rb b/config/initializers/google_api_client.rb index 443bb29fb52..49a35e5bd7c 100644 --- a/config/initializers/google_api_client.rb +++ b/config/initializers/google_api_client.rb @@ -1,23 +1,12 @@ # frozen_string_literal: true -# -# google-api-client >= 0.26.0 supports enabling CloudRun and Istio during -# cluster creation, but fog-google currently hard deps on '~> 0.23.0', which -# prevents us from upgrading. We are injecting these options as hashes below -# as a workaround until this is resolved. -# -# This can be removed once fog-google and google-api-client can be upgraded. -# See https://gitlab.com/gitlab-org/gitlab/issues/31280 for more details. -# -require 'google/apis/container_v1beta1' require 'google/apis/options' +# these require solve load order issues (undefined constant Google::Apis::ServerError and Signet::RemoteServerError, rescued in multiple places) +require 'google/apis/errors' +require 'signet/errors' + # As stated in https://github.com/googleapis/google-api-ruby-client#errors--retries, # enabling retries is strongly encouraged but disabled by default. Large uploads # that may hit timeouts will mainly benefit from this. Google::Apis::RequestOptions.default.retries = 3 if Gitlab::Utils.to_boolean(ENV.fetch('ENABLE_GOOGLE_API_RETRIES', true)) - -Google::Apis::ContainerV1beta1::AddonsConfig::Representation.tap do |representation| - representation.hash :cloud_run_config, as: 'cloudRunConfig' - representation.hash :istio_config, as: 'istioConfig' -end diff --git a/config/initializers/grape_validators.rb b/config/initializers/grape_validators.rb index 9d2b6dc9bd1..22f2c9ecf92 100644 --- a/config/initializers/grape_validators.rb +++ b/config/initializers/grape_validators.rb @@ -7,3 +7,4 @@ Grape::Validations.register_validator(:git_sha, ::API::Validations::Validators:: Grape::Validations.register_validator(:integer_none_any, ::API::Validations::Validators::IntegerNoneAny) Grape::Validations.register_validator(:array_none_any, ::API::Validations::Validators::ArrayNoneAny) Grape::Validations.register_validator(:check_assignees_count, ::API::Validations::Validators::CheckAssigneesCount) +Grape::Validations.register_validator(:untrusted_regexp, ::API::Validations::Validators::UntrustedRegexp) diff --git a/config/initializers/kaminari_active_record_relation_methods_with_limit.rb b/config/initializers/kaminari_active_record_relation_methods_with_limit.rb index cc20b83b234..55b98cda520 100644 --- a/config/initializers/kaminari_active_record_relation_methods_with_limit.rb +++ b/config/initializers/kaminari_active_record_relation_methods_with_limit.rb @@ -5,9 +5,10 @@ module Kaminari # This is a modified version of # https://github.com/kaminari/kaminari/blob/c5186f5d9b7f23299d115408e62047447fd3189d/kaminari-activerecord/lib/kaminari/activerecord/active_record_relation_methods.rb#L17-L41 - # that limit the COUNT query to 10,000 to avoid query timeouts. + # that limit the COUNT query to a configurable value to avoid query timeouts. + # The default limit value is 10,000 records # rubocop: disable Gitlab/ModuleWithInstanceVariables - def total_count_with_limit(column_name = :all, _options = nil) #:nodoc: + def total_count_with_limit(column_name = :all, options = {}) #:nodoc: return @total_count if defined?(@total_count) && @total_count # There are some cases that total count can be deduced from loaded records @@ -18,13 +19,14 @@ module Kaminari return @total_count = (current_page - 1) * limit_value + @records.length if @records.any? && (@records.length < limit_value) end + limit = options.fetch(:limit, MAX_COUNT_LIMIT).to_i # #count overrides the #select which could include generated columns referenced in #order, so skip #order here, where it's irrelevant to the result anyway c = except(:offset, :limit, :order) # Remove includes only if they are irrelevant c = c.except(:includes) unless references_eager_loaded_tables? # .group returns an OrderedHash that responds to #count # The following line was modified from `c = c.count(:all)` - c = c.limit(MAX_COUNT_LIMIT + 1).count(column_name) + c = c.limit(limit + 1).count(column_name) @total_count = if c.is_a?(Hash) || c.is_a?(ActiveSupport::OrderedHash) c.count diff --git a/config/initializers/lograge.rb b/config/initializers/lograge.rb index e1e15d1870c..01353ad4ec1 100644 --- a/config/initializers/lograge.rb +++ b/config/initializers/lograge.rb @@ -12,9 +12,9 @@ unless Gitlab::Runtime.sidekiq? config.lograge.logger = ActiveSupport::Logger.new(filename) config.lograge.before_format = lambda do |data, payload| data.delete(:error) - data[:db_duration_s] = Gitlab::Utils.ms_to_round_sec(data.delete(:db)) - data[:view_duration_s] = Gitlab::Utils.ms_to_round_sec(data.delete(:view)) - data[:duration_s] = Gitlab::Utils.ms_to_round_sec(data.delete(:duration)) + data[:db_duration_s] = Gitlab::Utils.ms_to_round_sec(data.delete(:db)) if data[:db] + data[:view_duration_s] = Gitlab::Utils.ms_to_round_sec(data.delete(:view)) if data[:view] + data[:duration_s] = Gitlab::Utils.ms_to_round_sec(data.delete(:duration)) if data[:duration] data end diff --git a/config/initializers/peek.rb b/config/initializers/peek.rb index a3810be70b2..deac938c80b 100644 --- a/config/initializers/peek.rb +++ b/config/initializers/peek.rb @@ -9,6 +9,8 @@ Peek.into Peek::Views::Host Peek.into Peek::Views::ActiveRecord Peek.into Peek::Views::Gitaly Peek.into Peek::Views::RedisDetailed +Peek.into Peek::Views::Elasticsearch Peek.into Peek::Views::Rugged +Peek.into Peek::Views::BulletDetailed if defined?(Bullet) Peek.into Peek::Views::Tracing if Labkit::Tracing.tracing_url_enabled? diff --git a/config/initializers/rack_attack_new.rb b/config/initializers/rack_attack.rb index 51b49bec864..51b49bec864 100644 --- a/config/initializers/rack_attack_new.rb +++ b/config/initializers/rack_attack.rb diff --git a/config/initializers/zz_metrics.rb b/config/initializers/zz_metrics.rb index 26f6743f480..7e675e478cf 100644 --- a/config/initializers/zz_metrics.rb +++ b/config/initializers/zz_metrics.rb @@ -147,6 +147,8 @@ if Gitlab::Metrics.enabled? && !Rails.env.test? && !(Rails.env.development? && d Gitlab::Application.configure do |config| config.middleware.use(Gitlab::Metrics::RackMiddleware) config.middleware.use(Gitlab::Middleware::RailsQueueDuration) + config.middleware.use(Gitlab::Metrics::RedisRackMiddleware) + config.middleware.use(Gitlab::Metrics::ElasticsearchRackMiddleware) end Sidekiq.configure_server do |config| |