From 192ce74aafa92a946e00a96140ca684fd7292999 Mon Sep 17 00:00:00 2001 From: Marius Bobin <mbobin@gitlab.com> Date: Sun, 4 Jun 2023 20:20:58 +0000 Subject: [PATCH] Revert "Merge branch '382033-force-partition-attach' into 'master'" This reverts merge request !121554 Changelog: other --- .../attach_ci_builds_partition.yml | 8 -- lib/gitlab/database/ci_builds_partitioning.rb | 125 ------------------ lib/tasks/gitlab/db.rake | 1 - 3 files changed, 134 deletions(-) delete mode 100644 config/feature_flags/development/attach_ci_builds_partition.yml delete mode 100644 lib/gitlab/database/ci_builds_partitioning.rb diff --git a/config/feature_flags/development/attach_ci_builds_partition.yml b/config/feature_flags/development/attach_ci_builds_partition.yml deleted file mode 100644 index 44c86dfd6cee..000000000000 --- a/config/feature_flags/development/attach_ci_builds_partition.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: attach_ci_builds_partition -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121554 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/382033 -milestone: '16.1' -type: development -group: group::pipeline execution -default_enabled: false diff --git a/lib/gitlab/database/ci_builds_partitioning.rb b/lib/gitlab/database/ci_builds_partitioning.rb deleted file mode 100644 index b726157044f2..000000000000 --- a/lib/gitlab/database/ci_builds_partitioning.rb +++ /dev/null @@ -1,125 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module Database - class CiBuildsPartitioning - include AsyncDdlExclusiveLeaseGuard - - ATTEMPTS = 10 - LOCK_TIMEOUT = 10.seconds - LEASE_TIMEOUT = 35.minutes - - def initialize(logger: Gitlab::AppLogger) - @connection = ::Ci::ApplicationRecord.connection - @timing_configuration = Array.new(ATTEMPTS) { [LOCK_TIMEOUT, rand((1.minute)..(3.minutes))] } - @logger = logger - end - - def execute - return unless can_execute? - - try_obtain_lease do - lock_retries.run(raise_on_exhaustion: true) do - connection.execute(partitioning_sql) - end - - log_info('Partition attached') - end - - rescue WithLockRetries::AttemptsExhaustedError - log_info('Failed to attach partition') - end - - private - - attr_reader :connection, :timing_configuration, :logger - - def can_execute? - return false if process_disabled? - return false unless Gitlab.com? - return false unless connection.table_exists?(:p_ci_builds) - - if already_attached? - log_info('Table already attached') - - return false - end - - if vacuum_running? - log_info('Autovacuum detected') - - return false - end - - true - end - - def process_disabled? - ::Feature.disabled?(:attach_ci_builds_partition) - end - - def already_attached? - Gitlab::Database::SharedModel.using_connection(connection) do - Gitlab::Database::PostgresPartition - .for_parent_table('public.p_ci_builds') - .for_identifier('public.ci_builds') - .exists? - end - end - - def vacuum_running? - Gitlab::Database::SharedModel.using_connection(connection) do - Gitlab::Database::PostgresAutovacuumActivity - .for_tables(%i[ci_pipelines ci_stages ci_builds ci_resource_groups]) - .any? - end - end - - def lock_retries - Gitlab::Database::WithLockRetries.new( - timing_configuration: timing_configuration, - connection: connection, - logger: logger, - klass: self.class - ) - end - - def partitioning_sql - <<~SQL.squish - SET LOCAL statement_timeout TO '11s'; - - LOCK ci_pipelines, ci_stages, ci_builds, ci_resource_groups IN ACCESS EXCLUSIVE MODE; - - DROP TRIGGER IF EXISTS ci_builds_loose_fk_trigger ON ci_builds; - - ALTER TABLE p_ci_builds ATTACH PARTITION ci_builds FOR VALUES IN (100); - - ALTER SEQUENCE ci_builds_id_seq OWNED BY p_ci_builds.id; - ALTER TABLE p_ci_builds DROP CONSTRAINT partitioning_constraint; - - CREATE TRIGGER ci_builds_loose_fk_trigger - AFTER DELETE ON ci_builds - REFERENCING OLD TABLE AS old_table - FOR EACH STATEMENT EXECUTE FUNCTION insert_into_loose_foreign_keys_deleted_records(); - - CREATE TRIGGER p_ci_builds_loose_fk_trigger - AFTER DELETE ON p_ci_builds - REFERENCING OLD TABLE AS old_table - FOR EACH STATEMENT EXECUTE FUNCTION insert_into_loose_foreign_keys_deleted_records(); - SQL - end - - def log_info(message) - logger.info(message: message, class: self.class.to_s) - end - - def connection_db_config - ::Ci::ApplicationRecord.connection_db_config - end - - def lease_timeout - LEASE_TIMEOUT - end - end - end -end diff --git a/lib/tasks/gitlab/db.rake b/lib/tasks/gitlab/db.rake index c9b02304d292..0c7c1872f1b5 100644 --- a/lib/tasks/gitlab/db.rake +++ b/lib/tasks/gitlab/db.rake @@ -241,7 +241,6 @@ namespace :gitlab do exit end - Gitlab::Database::CiBuildsPartitioning.new.execute Gitlab::Database::Reindexing.invoke end -- GitLab