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 44c86dfd6cee5e329b4687e52696875a4052aa8c..0000000000000000000000000000000000000000 --- 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 b726157044f2e639a7b4eb6d6b83ddbf9b8da97e..0000000000000000000000000000000000000000 --- 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 c9b02304d2927b2109b6ebf039c0db0966e77f44..0c7c1872f1b5d13a96255d35cd422f05468d0720 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