diff options
3 files changed, 51 insertions, 1 deletions
diff --git a/config/feature_flags/development/apollo_boards.yml b/config/feature_flags/development/apollo_boards.yml index d95e60bf4ea..09b37f4d2ed 100644 --- a/config/feature_flags/development/apollo_boards.yml +++ b/config/feature_flags/development/apollo_boards.yml @@ -5,4 +5,4 @@ rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/381210 milestone: '15.6' type: development group: group::product planning -default_enabled: false +default_enabled: true 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 |