From 3d0321d45dd477676f48c60d1aa66c8b2a75f6d1 Mon Sep 17 00:00:00 2001 From: Lucas Charles <me@lucascharles.me> Date: Tue, 17 Dec 2024 00:08:50 +0000 Subject: [PATCH] fix: Update DB healthcheck to use conn.load_balancer for deriving DB Change PrometheusAlertIndicator (and all inheriting indicators) to rely on connection.load_balancer for deriving current context SLI/SLOs Relates to https://gitlab.com/gitlab-org/gitlab/-/issues/501105 --- .../import/reassign_placeholder_user_records_service.rb | 6 ++---- .../database/background_migration/batched_migration.rb | 3 +-- lib/gitlab/database/health_status/context.rb | 5 ++--- .../indicators/prometheus_alert_indicator.rb | 8 ++++---- lib/gitlab/sidekiq_middleware/skip_jobs.rb | 3 +-- .../indicators/autovacuum_active_on_table_spec.rb | 3 +-- .../indicators/prometheus_alert_indicator_spec.rb | 3 +-- .../health_status/indicators/write_ahead_log_spec.rb | 3 +-- spec/lib/gitlab/database/health_status_spec.rb | 1 - spec/lib/gitlab/sidekiq_middleware/skip_jobs_spec.rb | 2 +- .../prometheus_alert_based_shared_examples.rb | 3 +-- 11 files changed, 15 insertions(+), 25 deletions(-) diff --git a/app/services/import/reassign_placeholder_user_records_service.rb b/app/services/import/reassign_placeholder_user_records_service.rb index 4e76ffff21be0..0714e5859232b 100644 --- a/app/services/import/reassign_placeholder_user_records_service.rb +++ b/app/services/import/reassign_placeholder_user_records_service.rb @@ -236,8 +236,7 @@ def db_table_health_check!(model) health_context = Gitlab::Database::HealthStatus::Context.new( DatabaseHealthStatusChecker.new(import_source_user.id, self.class.name), nil, - [model.table_name], - nil + [model.table_name] ) stop_signal = Gitlab::Database::HealthStatus @@ -253,8 +252,7 @@ def db_health_check! health_context = Gitlab::Database::HealthStatus::Context.new( DatabaseHealthStatusChecker.new(import_source_user.id, self.class.name), Gitlab::Database.schemas_to_base_models[gitlab_schema].first, - nil, - gitlab_schema + nil ) Gitlab::Database::HealthStatus diff --git a/lib/gitlab/database/background_migration/batched_migration.rb b/lib/gitlab/database/background_migration/batched_migration.rb index 567f99d034ea7..2e11abdb378b5 100644 --- a/lib/gitlab/database/background_migration/batched_migration.rb +++ b/lib/gitlab/database/background_migration/batched_migration.rb @@ -279,8 +279,7 @@ def health_context @health_context ||= Gitlab::Database::HealthStatus::Context.new( self, connection, - [table_name], - gitlab_schema.to_sym + [table_name] ) end diff --git a/lib/gitlab/database/health_status/context.rb b/lib/gitlab/database/health_status/context.rb index 717257a84ad36..639149908cb5c 100644 --- a/lib/gitlab/database/health_status/context.rb +++ b/lib/gitlab/database/health_status/context.rb @@ -4,15 +4,14 @@ module Gitlab module Database module HealthStatus class Context - attr_reader :status_checker, :connection, :tables, :gitlab_schema + attr_reader :status_checker, :connection, :tables # status_checker: the caller object which checks for database health status # eg: BackgroundMigration::BatchedMigration or DeferJobs::DatabaseHealthStatusChecker - def initialize(status_checker, connection, tables, gitlab_schema) + def initialize(status_checker, connection, tables) @status_checker = status_checker @connection = connection @tables = tables - @gitlab_schema = gitlab_schema end def status_checker_info diff --git a/lib/gitlab/database/health_status/indicators/prometheus_alert_indicator.rb b/lib/gitlab/database/health_status/indicators/prometheus_alert_indicator.rb index ecfb61014753b..b57e8bdda593d 100644 --- a/lib/gitlab/database/health_status/indicators/prometheus_alert_indicator.rb +++ b/lib/gitlab/database/health_status/indicators/prometheus_alert_indicator.rb @@ -13,7 +13,7 @@ class PrometheusAlertIndicator }.freeze def initialize(context) - @gitlab_schema = context.gitlab_schema.to_sym + @connection = context.connection end def evaluate @@ -34,7 +34,7 @@ def evaluate private - attr_reader :gitlab_schema + attr_reader :connection def indicator_name self.class.name.demodulize @@ -107,7 +107,7 @@ def sli_query gitlab_main_cell: prometheus_alert_db_indicators_settings[sli_query_key][:main_cell], gitlab_ci: prometheus_alert_db_indicators_settings[sli_query_key][:ci], gitlab_sec: gitlab_sec_query - }.fetch(gitlab_schema) + }.fetch(:"gitlab_#{connection.load_balancer.name}", nil) end strong_memoize_attr :sli_query @@ -121,7 +121,7 @@ def slo gitlab_main_cell: prometheus_alert_db_indicators_settings[slo_key][:main_cell], gitlab_ci: prometheus_alert_db_indicators_settings[slo_key][:ci], gitlab_sec: gitlab_sec_query - }.fetch(gitlab_schema) + }.fetch(:"gitlab_#{connection.load_balancer.name}", nil) end strong_memoize_attr :slo diff --git a/lib/gitlab/sidekiq_middleware/skip_jobs.rb b/lib/gitlab/sidekiq_middleware/skip_jobs.rb index e12d3bd079b2d..942834357aaa7 100644 --- a/lib/gitlab/sidekiq_middleware/skip_jobs.rb +++ b/lib/gitlab/sidekiq_middleware/skip_jobs.rb @@ -96,8 +96,7 @@ def defer_job_by_database_health_signal?(job, worker_class) health_context = Gitlab::Database::HealthStatus::Context.new( DatabaseHealthStatusChecker.new(job['jid'], worker_class.name), job_base_model.connection, - tables, - schema + tables ) Gitlab::Database::HealthStatus.evaluate(health_context).any?(&:stop?) diff --git a/spec/lib/gitlab/database/health_status/indicators/autovacuum_active_on_table_spec.rb b/spec/lib/gitlab/database/health_status/indicators/autovacuum_active_on_table_spec.rb index edf452575b14f..a05433e63c1ca 100644 --- a/spec/lib/gitlab/database/health_status/indicators/autovacuum_active_on_table_spec.rb +++ b/spec/lib/gitlab/database/health_status/indicators/autovacuum_active_on_table_spec.rb @@ -27,8 +27,7 @@ Gitlab::Database::HealthStatus::Context.new( described_class, connection, - tables, - :gitlab_main + tables ) end diff --git a/spec/lib/gitlab/database/health_status/indicators/prometheus_alert_indicator_spec.rb b/spec/lib/gitlab/database/health_status/indicators/prometheus_alert_indicator_spec.rb index 2bd7639875cd4..4d593860c0b91 100644 --- a/spec/lib/gitlab/database/health_status/indicators/prometheus_alert_indicator_spec.rb +++ b/spec/lib/gitlab/database/health_status/indicators/prometheus_alert_indicator_spec.rb @@ -10,8 +10,7 @@ Gitlab::Database::HealthStatus::Context.new( described_class, connection, - ['users'], - :gitlab_main + ['users'] ) end diff --git a/spec/lib/gitlab/database/health_status/indicators/write_ahead_log_spec.rb b/spec/lib/gitlab/database/health_status/indicators/write_ahead_log_spec.rb index cb849a7662156..58ef8d6dce254 100644 --- a/spec/lib/gitlab/database/health_status/indicators/write_ahead_log_spec.rb +++ b/spec/lib/gitlab/database/health_status/indicators/write_ahead_log_spec.rb @@ -18,8 +18,7 @@ Gitlab::Database::HealthStatus::Context.new( described_class, connection, - tables, - :gitlab_main + tables ) end diff --git a/spec/lib/gitlab/database/health_status_spec.rb b/spec/lib/gitlab/database/health_status_spec.rb index 8e9cd1c0fc9c8..d25e4e301eb24 100644 --- a/spec/lib/gitlab/database/health_status_spec.rb +++ b/spec/lib/gitlab/database/health_status_spec.rb @@ -123,7 +123,6 @@ def self.name Gitlab::Database::HealthStatus::Context.new( deferred_worker_health_checker, ActiveRecord::Base.connection, - :gitlab_main, [:users] ) end diff --git a/spec/lib/gitlab/sidekiq_middleware/skip_jobs_spec.rb b/spec/lib/gitlab/sidekiq_middleware/skip_jobs_spec.rb index ecdc620c01710..0383791b82518 100644 --- a/spec/lib/gitlab/sidekiq_middleware/skip_jobs_spec.rb +++ b/spec/lib/gitlab/sidekiq_middleware/skip_jobs_spec.rb @@ -208,7 +208,7 @@ def self.name it 'uses the lazy evaluated schema and tables returned by the block' do expect(Gitlab::Database::HealthStatus::Context).to receive(:new) - .with(anything, anything, [:ci_pipelines], :gitlab_ci).and_call_original + .with(anything, anything, [:ci_pipelines]).and_call_original expect { |b| subject.call(TestWorker.new, job, queue, &b) }.to yield_control end diff --git a/spec/support/shared_examples/database_health_status_indicators/prometheus_alert_based_shared_examples.rb b/spec/support/shared_examples/database_health_status_indicators/prometheus_alert_based_shared_examples.rb index b3c9efa0cfa24..09897f3551125 100644 --- a/spec/support/shared_examples/database_health_status_indicators/prometheus_alert_based_shared_examples.rb +++ b/spec/support/shared_examples/database_health_status_indicators/prometheus_alert_based_shared_examples.rb @@ -11,8 +11,7 @@ end describe '#evaluate' do - let(:context) { Gitlab::Database::HealthStatus::Context.new(described_class, connection, ['users'], gitlab_schema) } - let(:gitlab_schema) { "gitlab_#{schema}" } + let(:context) { Gitlab::Database::HealthStatus::Context.new(described_class, connection, ['users']) } let(:client_ready) { true } let(:indicator_name) { described_class.name.demodulize } let(:indicator) { described_class.new(context) } -- GitLab