From d000638f9ab3589c287b3584996838f3f78824ad Mon Sep 17 00:00:00 2001
From: Kerri Miller <kerrizor@kerrizor.com>
Date: Mon, 17 Feb 2025 21:10:22 +0000
Subject: [PATCH] Drop merge_request_diff_files_99208b8fac table

---
 config/initializers/postgres_partitioning.rb  | 13 ---
 .../merge_request_diff_files_99208b8fac.yml   |  3 +
 ...drop_merge_request_diff_files_partition.rb | 24 ++++++
 db/schema_migrations/20250127230017           |  1 +
 db/structure.sql                              | 86 -------------------
 .../database/desired_sharding_key_spec.rb     |  3 +-
 rubocop/rubocop-migrations.yml                |  1 -
 spec/db/schema_spec.rb                        |  3 -
 spec/lib/gitlab/database/sharding_key_spec.rb |  1 -
 9 files changed, 29 insertions(+), 106 deletions(-)
 rename db/docs/{ => deleted_tables}/merge_request_diff_files_99208b8fac.yml (85%)
 create mode 100644 db/post_migrate/20250127230017_drop_merge_request_diff_files_partition.rb
 create mode 100644 db/schema_migrations/20250127230017

diff --git a/config/initializers/postgres_partitioning.rb b/config/initializers/postgres_partitioning.rb
index af6a906ed84ee..de71af20d8f85 100644
--- a/config/initializers/postgres_partitioning.rb
+++ b/config/initializers/postgres_partitioning.rb
@@ -94,19 +94,6 @@
   ]
 )
 
-# Enable partition management for the backfill table during merge_request_diff_files partitioning.
-# This way new partitions will be created as the trigger syncs new rows across to this table.
-#
-Gitlab::Database::Partitioning.register_tables(
-  [
-    {
-      limit_connection_names: %i[main],
-      table_name: 'merge_request_diff_files_99208b8fac',
-      partitioned_column: :merge_request_diff_id, strategy: :int_range, partition_size: 200_000_000
-    }
-  ]
-)
-
 # Enable partition management for the backfill table during web_hook_logs partitioning.
 # This way new partitions will be created as the trigger syncs new rows across to this table.
 Gitlab::Database::Partitioning.register_tables(
diff --git a/db/docs/merge_request_diff_files_99208b8fac.yml b/db/docs/deleted_tables/merge_request_diff_files_99208b8fac.yml
similarity index 85%
rename from db/docs/merge_request_diff_files_99208b8fac.yml
rename to db/docs/deleted_tables/merge_request_diff_files_99208b8fac.yml
index bc7b69029ab53..b7f58934c4e31 100644
--- a/db/docs/merge_request_diff_files_99208b8fac.yml
+++ b/db/docs/deleted_tables/merge_request_diff_files_99208b8fac.yml
@@ -6,7 +6,9 @@ feature_categories:
 - code_review_workflow
 description: Temporary table for partitioning the main merge_request_diff_files table
 introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/149181
+removed_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/179313
 milestone: '17.0'
+removed_in_milestone: '17.9'
 gitlab_schema: gitlab_main_cell
 desired_sharding_key:
   project_id:
@@ -18,3 +20,4 @@ desired_sharding_key:
         sharding_key: project_id
         belongs_to: merge_request_diff
 table_size: over_limit
+
diff --git a/db/post_migrate/20250127230017_drop_merge_request_diff_files_partition.rb b/db/post_migrate/20250127230017_drop_merge_request_diff_files_partition.rb
new file mode 100644
index 0000000000000..2639414770545
--- /dev/null
+++ b/db/post_migrate/20250127230017_drop_merge_request_diff_files_partition.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+class DropMergeRequestDiffFilesPartition < Gitlab::Database::Migration[2.2]
+  Gitlab::Database::Migration[2.2]
+  include Gitlab::Database::PartitioningMigrationHelpers
+
+  milestone '17.9'
+  disable_ddl_transaction!
+
+  def up
+    drop_partitioned_table_for('merge_request_diff_files')
+  end
+
+  def down
+    partition_table_by_int_range(
+      'merge_request_diff_files',
+      'merge_request_diff_id',
+      partition_size: 200_000_000,
+      primary_key: %w[merge_request_diff_id relative_order]
+    )
+
+    add_column :merge_request_diff_files_99208b8fac, :project_id, :bigint
+  end
+end
diff --git a/db/schema_migrations/20250127230017 b/db/schema_migrations/20250127230017
new file mode 100644
index 0000000000000..fd04628f1a3de
--- /dev/null
+++ b/db/schema_migrations/20250127230017
@@ -0,0 +1 @@
+e47acb862f06277a2761acadc3195c01cd9dbedf481ff7b45b0c275e26ca678c
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 8466dddedd5f8..0a7294a6797a9 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -890,67 +890,6 @@ $$;
 
 COMMENT ON FUNCTION table_sync_function_29bc99d6db() IS 'Partitioning migration: table sync for web_hook_logs table';
 
-CREATE FUNCTION table_sync_function_3f39f64fc3() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-BEGIN
-IF (TG_OP = 'DELETE') THEN
-  DELETE FROM merge_request_diff_files_99208b8fac where "merge_request_diff_id" = OLD."merge_request_diff_id" AND "relative_order" = OLD."relative_order";
-ELSIF (TG_OP = 'UPDATE') THEN
-  UPDATE merge_request_diff_files_99208b8fac
-  SET "new_file" = NEW."new_file",
-    "renamed_file" = NEW."renamed_file",
-    "deleted_file" = NEW."deleted_file",
-    "too_large" = NEW."too_large",
-    "a_mode" = NEW."a_mode",
-    "b_mode" = NEW."b_mode",
-    "new_path" = NEW."new_path",
-    "old_path" = NEW."old_path",
-    "diff" = NEW."diff",
-    "binary" = NEW."binary",
-    "external_diff_offset" = NEW."external_diff_offset",
-    "external_diff_size" = NEW."external_diff_size",
-    "generated" = NEW."generated"
-  WHERE merge_request_diff_files_99208b8fac."merge_request_diff_id" = NEW."merge_request_diff_id" AND merge_request_diff_files_99208b8fac."relative_order" = NEW."relative_order";
-ELSIF (TG_OP = 'INSERT') THEN
-  INSERT INTO merge_request_diff_files_99208b8fac ("new_file",
-    "renamed_file",
-    "deleted_file",
-    "too_large",
-    "a_mode",
-    "b_mode",
-    "new_path",
-    "old_path",
-    "diff",
-    "binary",
-    "external_diff_offset",
-    "external_diff_size",
-    "generated",
-    "merge_request_diff_id",
-    "relative_order")
-  VALUES (NEW."new_file",
-    NEW."renamed_file",
-    NEW."deleted_file",
-    NEW."too_large",
-    NEW."a_mode",
-    NEW."b_mode",
-    NEW."new_path",
-    NEW."old_path",
-    NEW."diff",
-    NEW."binary",
-    NEW."external_diff_offset",
-    NEW."external_diff_size",
-    NEW."generated",
-    NEW."merge_request_diff_id",
-    NEW."relative_order");
-END IF;
-RETURN NULL;
-
-END
-$$;
-
-COMMENT ON FUNCTION table_sync_function_3f39f64fc3() IS 'Partitioning migration: table sync for merge_request_diff_files table';
-
 CREATE FUNCTION table_sync_function_686d6c7993() RETURNS trigger
     LANGUAGE plpgsql
     AS $$
@@ -4362,26 +4301,6 @@ CREATE TABLE merge_request_diff_commits_b5377a7a34 (
 )
 PARTITION BY RANGE (merge_request_diff_id);
 
-CREATE TABLE merge_request_diff_files_99208b8fac (
-    new_file boolean NOT NULL,
-    renamed_file boolean NOT NULL,
-    deleted_file boolean NOT NULL,
-    too_large boolean NOT NULL,
-    a_mode character varying NOT NULL,
-    b_mode character varying NOT NULL,
-    new_path text NOT NULL,
-    old_path text NOT NULL,
-    diff text,
-    "binary" boolean,
-    external_diff_offset integer,
-    external_diff_size integer,
-    generated boolean,
-    merge_request_diff_id bigint NOT NULL,
-    relative_order integer NOT NULL,
-    project_id bigint
-)
-PARTITION BY RANGE (merge_request_diff_id);
-
 CREATE TABLE p_batched_git_ref_updates_deletions (
     id bigint NOT NULL,
     project_id bigint NOT NULL,
@@ -28200,9 +28119,6 @@ ALTER TABLE ONLY merge_request_diff_commits
 ALTER TABLE ONLY merge_request_diff_details
     ADD CONSTRAINT merge_request_diff_details_pkey PRIMARY KEY (merge_request_diff_id);
 
-ALTER TABLE ONLY merge_request_diff_files_99208b8fac
-    ADD CONSTRAINT merge_request_diff_files_99208b8fac_pkey PRIMARY KEY (merge_request_diff_id, relative_order);
-
 ALTER TABLE ONLY merge_request_diff_files
     ADD CONSTRAINT merge_request_diff_files_pkey PRIMARY KEY (merge_request_diff_id, relative_order);
 
@@ -38224,8 +38140,6 @@ CREATE TRIGGER table_sync_trigger_b99eb6998c AFTER INSERT OR DELETE OR UPDATE ON
 
 CREATE TRIGGER table_sync_trigger_bc3e7b56bd AFTER INSERT OR DELETE OR UPDATE ON ci_runner_machines FOR EACH ROW EXECUTE FUNCTION table_sync_function_e438f29263();
 
-CREATE TRIGGER table_sync_trigger_cd362c20e2 AFTER INSERT OR DELETE OR UPDATE ON merge_request_diff_files FOR EACH ROW EXECUTE FUNCTION table_sync_function_3f39f64fc3();
-
 CREATE TRIGGER tags_loose_fk_trigger AFTER DELETE ON tags REFERENCING OLD TABLE AS old_table FOR EACH STATEMENT EXECUTE FUNCTION insert_into_loose_foreign_keys_deleted_records();
 
 CREATE TRIGGER trigger_01b3fc052119 BEFORE INSERT OR UPDATE ON approval_merge_request_rules FOR EACH ROW EXECUTE FUNCTION trigger_01b3fc052119();
diff --git a/ee/spec/lib/gitlab/database/desired_sharding_key_spec.rb b/ee/spec/lib/gitlab/database/desired_sharding_key_spec.rb
index d5a54f447a942..c84f5d6431543 100644
--- a/ee/spec/lib/gitlab/database/desired_sharding_key_spec.rb
+++ b/ee/spec/lib/gitlab/database/desired_sharding_key_spec.rb
@@ -13,8 +13,7 @@
       # below table(s) will get a foreign key after its partitioning backfill finishes,
       # before the application begins using it.
       #
-      'merge_request_diff_commits_b5377a7a34.merge_request_diff_id',
-      'merge_request_diff_files_99208b8fac.merge_request_diff_id'
+      'merge_request_diff_commits_b5377a7a34.merge_request_diff_id'
     ]
   end
 
diff --git a/rubocop/rubocop-migrations.yml b/rubocop/rubocop-migrations.yml
index 6c040c4e1d544..c4a2d03d97948 100644
--- a/rubocop/rubocop-migrations.yml
+++ b/rubocop/rubocop-migrations.yml
@@ -31,7 +31,6 @@ Migration/UpdateLargeTable:
   - :merge_request_diff_commits_b5377a7a34_1000000001
   - :merge_request_diff_commits_b5377a7a34_800000001
   - :merge_request_diff_files
-  - :merge_request_diff_files_99208b8fac_1000000001
   - :merge_request_diffs
   - :merge_request_metrics
   - :merge_requests
diff --git a/spec/db/schema_spec.rb b/spec/db/schema_spec.rb
index 5af52a5f8702b..2f3a076a30b74 100644
--- a/spec/db/schema_spec.rb
+++ b/spec/db/schema_spec.rb
@@ -174,9 +174,6 @@
       # merge_request_diff_commits_b5377a7a34 is the temporary table for the merge_request_diff_commits partitioning
       # backfill. It will get foreign keys after the partitioning is finished.
       merge_request_diff_commits_b5377a7a34: %w[merge_request_diff_id commit_author_id committer_id project_id],
-      # merge_request_diff_files_99208b8fac is the temporary table for the merge_request_diff_commits partitioning
-      # backfill. It will get foreign keys after the partitioning is finished.
-      merge_request_diff_files_99208b8fac: %w[merge_request_diff_id project_id],
       merge_request_user_mentions: %w[project_id],
       namespaces: %w[owner_id parent_id],
       namespace_descendants: %w[namespace_id],
diff --git a/spec/lib/gitlab/database/sharding_key_spec.rb b/spec/lib/gitlab/database/sharding_key_spec.rb
index d2863883cdd21..0f2998dc3af79 100644
--- a/spec/lib/gitlab/database/sharding_key_spec.rb
+++ b/spec/lib/gitlab/database/sharding_key_spec.rb
@@ -10,7 +10,6 @@
   let(:allowed_to_be_missing_sharding_key) do
     [
       'merge_request_diff_commits_b5377a7a34', # has a desired sharding key instead
-      'merge_request_diff_files_99208b8fac', # has a desired sharding key instead
       'p_ci_pipeline_variables', # has a desired sharding key instead
       'web_hook_logs_daily' # temporary copy of web_hook_logs
     ]
-- 
GitLab