diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-10 22:09:31 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-10 22:09:31 +0300 |
commit | 9d12004692367ef33261b8e70372710458fcc433 (patch) | |
tree | 461bd4bea22d42da057f03f1e60ea9a26c36d956 | |
parent | 64833755f04a3ae876a7d3ff65ac83ec652c96e4 (diff) |
Add latest changes from gitlab-org/gitlab@16-6-stable-ee
2 files changed, 50 insertions, 0 deletions
diff --git a/db/post_migrate/20231004091113_swap_columns_for_ci_sources_pipelines_pipeline_id_bigint.rb b/db/post_migrate/20231004091113_swap_columns_for_ci_sources_pipelines_pipeline_id_bigint.rb index 6ce4e1a4da5..d7b274be29f 100644 --- a/db/post_migrate/20231004091113_swap_columns_for_ci_sources_pipelines_pipeline_id_bigint.rb +++ b/db/post_migrate/20231004091113_swap_columns_for_ci_sources_pipelines_pipeline_id_bigint.rb @@ -36,6 +36,8 @@ class SwapColumnsForCiSourcesPipelinesPipelineIdBigint < Gitlab::Database::Migra private def swap + ensure_indexes_exist + with_lock_retries(raise_on_exhaustion: true) do # Lock the tables involved. execute "LOCK TABLE #{TARGET_TABLE_NAME}, #{TABLE_NAME} IN ACCESS EXCLUSIVE MODE" @@ -74,4 +76,14 @@ class SwapColumnsForCiSourcesPipelinesPipelineIdBigint < Gitlab::Database::Migra end end end + + def ensure_indexes_exist + unless index_exists?(TABLE_NAME, :pipeline_id, name: :index_ci_sources_pipelines_on_pipeline_id) + add_concurrent_index(TABLE_NAME, :pipeline_id, name: :index_ci_sources_pipelines_on_pipeline_id) + end + + return if index_exists?(TABLE_NAME, :source_pipeline_id, name: :index_ci_sources_pipelines_on_source_pipeline_id) + + add_concurrent_index(TABLE_NAME, :source_pipeline_id, name: :index_ci_sources_pipelines_on_source_pipeline_id) + end end diff --git a/spec/migrations/db/post_migrate/20231004091113_swap_columns_for_ci_sources_pipelines_pipeline_id_bigint_spec.rb b/spec/migrations/db/post_migrate/20231004091113_swap_columns_for_ci_sources_pipelines_pipeline_id_bigint_spec.rb new file mode 100644 index 00000000000..3d1a4176833 --- /dev/null +++ b/spec/migrations/db/post_migrate/20231004091113_swap_columns_for_ci_sources_pipelines_pipeline_id_bigint_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'spec_helper' +require_migration! + +RSpec.describe SwapColumnsForCiSourcesPipelinesPipelineIdBigint, feature_category: :continuous_integration do + let(:connection) { active_record_base.connection } + + before do + connection.execute('ALTER TABLE ci_sources_pipelines ALTER COLUMN pipeline_id TYPE integer') + connection.execute('ALTER TABLE ci_sources_pipelines ALTER COLUMN pipeline_id_convert_to_bigint TYPE bigint') + end + + it_behaves_like( + 'swap conversion columns', + table_name: :ci_sources_pipelines, + from: :pipeline_id, + to: :pipeline_id_convert_to_bigint + ) + + context 'when indexes are missing' do + before do + connection.remove_index( + :ci_sources_pipelines, name: :index_ci_sources_pipelines_on_pipeline_id, if_exists: true + ) + connection.remove_index( + :ci_sources_pipelines, name: :index_ci_sources_pipelines_on_source_pipeline_id, if_exists: true + ) + end + + it_behaves_like( + 'swap conversion columns', + table_name: :ci_sources_pipelines, + from: :pipeline_id, + to: :pipeline_id_convert_to_bigint + ) + end +end |