From bfa6684ff4cfe4d70002ab25c2081ea6a8bb5c57 Mon Sep 17 00:00:00 2001 From: Zhaochen Li Date: Thu, 30 Oct 2025 13:40:13 +1100 Subject: [PATCH 1/2] Prepare bigint indexes for merge_requests stage two --- ...ge_requests_bigint_conversion_stage_two.rb | 108 ++++++++++++++++++ db/schema_migrations/20251030004435 | 1 + 2 files changed, 109 insertions(+) create mode 100644 db/post_migrate/20251030004435_prepare_indexes_for_merge_requests_bigint_conversion_stage_two.rb create mode 100644 db/schema_migrations/20251030004435 diff --git a/db/post_migrate/20251030004435_prepare_indexes_for_merge_requests_bigint_conversion_stage_two.rb b/db/post_migrate/20251030004435_prepare_indexes_for_merge_requests_bigint_conversion_stage_two.rb new file mode 100644 index 00000000000000..b2f21341dff5bd --- /dev/null +++ b/db/post_migrate/20251030004435_prepare_indexes_for_merge_requests_bigint_conversion_stage_two.rb @@ -0,0 +1,108 @@ +# frozen_string_literal: true + +class PrepareIndexesForMergeRequestsBigintConversionStageTwo < Gitlab::Database::Migration[2.3] + include Gitlab::Database::MigrationHelpers::ConvertToBigint + + disable_ddl_transaction! + milestone '18.6' + + TABLE_NAME = 'merge_requests' + BIGINT_COLUMNS = [ + :target_project_id_convert_to_bigint, + :latest_merge_request_diff_id_convert_to_bigint, + :last_edited_by_id_convert_to_bigint + ].freeze + INDEXES = [ + { + name: 'index_merge_requests_on_target_project_id_and_iid', + columns: [:target_project_id_convert_to_bigint, :iid], + options: { unique: true } + }, + { + name: 'index_merge_requests_on_target_project_id_and_merged_commit_sha', + columns: [:target_project_id_convert_to_bigint, :merged_commit_sha] + }, + { + name: 'index_merge_requests_on_target_project_id_and_source_branch', + columns: [:target_project_id_convert_to_bigint, :source_branch] + }, + { + name: 'index_merge_requests_on_target_project_id_and_squash_commit_sha', + columns: [:target_project_id_convert_to_bigint, :squash_commit_sha] + }, + { + name: 'index_merge_requests_on_target_project_id_and_target_branch', + columns: [:target_project_id_convert_to_bigint, :target_branch], + options: { where: "state_id = 1 AND merge_when_pipeline_succeeds = true" } + }, + { + name: 'index_merge_requests_for_latest_diffs_with_state_merged', + columns: [:latest_merge_request_diff_id_convert_to_bigint, :target_project_id_convert_to_bigint], + options: { where: "state_id = 3" } + }, + { + name: 'index_merge_requests_on_latest_merge_request_diff_id', + columns: [:latest_merge_request_diff_id_convert_to_bigint] + }, + { + name: 'idx_mrs_on_target_id_and_created_at_and_state_id', + columns: [:target_project_id_convert_to_bigint, :state_id, :created_at, :id] + }, + { + name: 'index_merge_requests_on_target_project_id_and_created_at_and_id', + columns: [:target_project_id_convert_to_bigint, :created_at, :id] + }, + { + name: 'index_merge_requests_on_target_project_id_and_updated_at_and_id', + columns: [:target_project_id_convert_to_bigint, :updated_at, :id] + }, + { + name: 'index_merge_requests_on_tp_id_and_merge_commit_sha_and_id', + columns: [:target_project_id_convert_to_bigint, :merge_commit_sha, :id] + }, + { + name: 'index_merge_requests_on_author_id_and_target_project_id', + columns: [:author_id, :target_project_id_convert_to_bigint] + }, + { + name: 'index_on_merge_requests_for_latest_diffs', + columns: [:target_project_id_convert_to_bigint], + options: { include: [:id, :latest_merge_request_diff_id_convert_to_bigint] } + } + ].freeze + + def up + return if skip_migration? + + # rubocop:disable Migration/PreventIndexCreation -- Bigint migration + INDEXES.each do |index| + options = index[:options] || {} + prepare_async_index(TABLE_NAME, index[:columns], name: bigint_index_name(index[:name]), **options) + end + # rubocop:enable Migration/PreventIndexCreation + end + + def down + return if skip_migration? + + INDEXES.each do |index| + options = index[:options] || {} + unprepare_async_index(TABLE_NAME, index[:columns], name: bigint_index_name(index[:name]), **options) + end + end + + private + + def skip_migration? + unless conversion_columns_exist? + say "No conversion columns found - migration skipped" + return true + end + + false + end + + def conversion_columns_exist? + BIGINT_COLUMNS.all? { |column| column_exists?(TABLE_NAME, column) } + end +end diff --git a/db/schema_migrations/20251030004435 b/db/schema_migrations/20251030004435 new file mode 100644 index 00000000000000..7504b27650ef4c --- /dev/null +++ b/db/schema_migrations/20251030004435 @@ -0,0 +1 @@ +5a6bf8ee7188baaa82b16d92c665340b16411a3945f0340287b4ee103ed0f3dd \ No newline at end of file -- GitLab From a04113f9152785067bef0abf9d5820e742d5f547 Mon Sep 17 00:00:00 2001 From: Zhaochen Li Date: Mon, 10 Nov 2025 12:24:16 +1100 Subject: [PATCH 2/2] Refresh timestamp --- ...re_indexes_for_merge_requests_bigint_conversion_stage_two.rb} | 0 db/schema_migrations/20251030004435 | 1 - db/schema_migrations/20251110012104 | 1 + 3 files changed, 1 insertion(+), 1 deletion(-) rename db/post_migrate/{20251030004435_prepare_indexes_for_merge_requests_bigint_conversion_stage_two.rb => 20251110012104_prepare_indexes_for_merge_requests_bigint_conversion_stage_two.rb} (100%) delete mode 100644 db/schema_migrations/20251030004435 create mode 100644 db/schema_migrations/20251110012104 diff --git a/db/post_migrate/20251030004435_prepare_indexes_for_merge_requests_bigint_conversion_stage_two.rb b/db/post_migrate/20251110012104_prepare_indexes_for_merge_requests_bigint_conversion_stage_two.rb similarity index 100% rename from db/post_migrate/20251030004435_prepare_indexes_for_merge_requests_bigint_conversion_stage_two.rb rename to db/post_migrate/20251110012104_prepare_indexes_for_merge_requests_bigint_conversion_stage_two.rb diff --git a/db/schema_migrations/20251030004435 b/db/schema_migrations/20251030004435 deleted file mode 100644 index 7504b27650ef4c..00000000000000 --- a/db/schema_migrations/20251030004435 +++ /dev/null @@ -1 +0,0 @@ -5a6bf8ee7188baaa82b16d92c665340b16411a3945f0340287b4ee103ed0f3dd \ No newline at end of file diff --git a/db/schema_migrations/20251110012104 b/db/schema_migrations/20251110012104 new file mode 100644 index 00000000000000..a7c40317933bab --- /dev/null +++ b/db/schema_migrations/20251110012104 @@ -0,0 +1 @@ +7070de0ba07af23a7c45a9709d5941d426b0e2724eed2da617398af9fae2a1a9 \ No newline at end of file -- GitLab