From f36ef30b0a65efc88a2157612e89df587e4bcb36 Mon Sep 17 00:00:00 2001
From: Douglas Barbosa Alexandre <dbalexandre@gmail.com>
Date: Mon, 19 Feb 2024 20:09:43 -0300
Subject: [PATCH] Drop project_repository_states table

Changelog: removed
---
 .../project_repository_states.yml             |  2 +
 ...e_foreign_key_project_repository_states.rb | 22 +++++++
 ...04_drop_project_repository_states_table.rb | 57 +++++++++++++++++++
 db/schema_migrations/20240222000003           |  1 +
 db/schema_migrations/20240222000004           |  1 +
 db/structure.sql                              | 46 ---------------
 6 files changed, 83 insertions(+), 46 deletions(-)
 rename db/docs/{ => deleted_tables}/project_repository_states.yml (81%)
 create mode 100644 db/post_migrate/20240222000003_remove_foreign_key_project_repository_states.rb
 create mode 100644 db/post_migrate/20240222000004_drop_project_repository_states_table.rb
 create mode 100644 db/schema_migrations/20240222000003
 create mode 100644 db/schema_migrations/20240222000004

diff --git a/db/docs/project_repository_states.yml b/db/docs/deleted_tables/project_repository_states.yml
similarity index 81%
rename from db/docs/project_repository_states.yml
rename to db/docs/deleted_tables/project_repository_states.yml
index 7624d7d6a755a..d48b54402b418 100644
--- a/db/docs/project_repository_states.yml
+++ b/db/docs/deleted_tables/project_repository_states.yml
@@ -16,3 +16,5 @@ allow_cross_foreign_keys:
 - gitlab_main_clusterwide
 sharding_key:
   project_id: projects
+removed_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/145195
+removed_in_milestone: '16.10'
diff --git a/db/post_migrate/20240222000003_remove_foreign_key_project_repository_states.rb b/db/post_migrate/20240222000003_remove_foreign_key_project_repository_states.rb
new file mode 100644
index 0000000000000..dd7a0307a905b
--- /dev/null
+++ b/db/post_migrate/20240222000003_remove_foreign_key_project_repository_states.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class RemoveForeignKeyProjectRepositoryStates < Gitlab::Database::Migration[2.2]
+  milestone '16.10'
+
+  disable_ddl_transaction!
+
+  FOREIGN_KEY_NAME_PROJECTS = "fk_rails_0f2298ca8a"
+
+  def up
+    with_lock_retries do
+      remove_foreign_key_if_exists(:project_repository_states, :projects,
+        name: FOREIGN_KEY_NAME_PROJECTS, reverse_lock_order: true)
+    end
+  end
+
+  def down
+    add_concurrent_foreign_key(:project_repository_states, :projects,
+      name: FOREIGN_KEY_NAME_PROJECTS, column: :project_id,
+      target_column: :id, on_delete: :cascade)
+  end
+end
diff --git a/db/post_migrate/20240222000004_drop_project_repository_states_table.rb b/db/post_migrate/20240222000004_drop_project_repository_states_table.rb
new file mode 100644
index 0000000000000..f9a140cd8eff4
--- /dev/null
+++ b/db/post_migrate/20240222000004_drop_project_repository_states_table.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+class DropProjectRepositoryStatesTable < Gitlab::Database::Migration[2.2]
+  milestone '16.10'
+
+  disable_ddl_transaction!
+
+  def up
+    drop_table :project_repository_states, if_exists: true
+  end
+
+  def down
+    return if table_exists?(:project_repository_states)
+
+    create_table :project_repository_states, id: :integer do |t|
+      t.integer :project_id, null: false
+      t.binary :repository_verification_checksum, using: 'repository_verification_checksum::bytea'
+      t.binary :wiki_verification_checksum, using: 'wiki_verification_checksum::bytea'
+      t.string :last_repository_verification_failure
+      t.string :last_wiki_verification_failure
+      t.datetime_with_timezone :repository_retry_at
+      t.datetime_with_timezone :wiki_retry_at
+      t.integer :repository_retry_count
+      t.integer :wiki_retry_count
+      t.datetime_with_timezone :last_repository_verification_ran_at
+      t.datetime_with_timezone :last_wiki_verification_ran_at
+      t.datetime_with_timezone :last_repository_updated_at
+      t.datetime_with_timezone :last_wiki_updated_at
+
+      t.index [:project_id, :last_repository_verification_ran_at],
+        name: :idx_repository_states_on_last_repository_verification_ran_at,
+        where: "(repository_verification_checksum IS NOT NULL) AND (last_repository_verification_failure IS NULL)"
+
+      t.index [:project_id, :last_wiki_verification_ran_at],
+        name: :idx_repository_states_on_last_wiki_verification_ran_at,
+        where: "(wiki_verification_checksum IS NOT NULL) AND (last_wiki_verification_failure IS NULL)"
+
+      t.index :last_repository_verification_failure,
+        name: :idx_repository_states_on_repository_failure_partial,
+        where: "last_repository_verification_failure IS NOT NULL"
+
+      t.index :last_wiki_verification_failure,
+        name: :idx_repository_states_on_wiki_failure_partial,
+        where: "last_wiki_verification_failure IS NOT NULL"
+
+      # rubocop:disable Layout/LineLength -- Where clause is just too long.
+      t.index :project_id,
+        name: :idx_repository_states_outdated_checksums,
+        where: "((repository_verification_checksum IS NULL) AND (last_repository_verification_failure IS NULL)) OR ((wiki_verification_checksum IS NULL) AND (last_wiki_verification_failure IS NULL))"
+      # rubocop:enable Layout/LineLength
+
+      t.index :project_id,
+        name: :index_project_repository_states_on_project_id,
+        unique: true
+    end
+  end
+end
diff --git a/db/schema_migrations/20240222000003 b/db/schema_migrations/20240222000003
new file mode 100644
index 0000000000000..38c2465204c24
--- /dev/null
+++ b/db/schema_migrations/20240222000003
@@ -0,0 +1 @@
+c8ce22627e708d6e9d1b967adc7ed83827a589069b729ec2a3f3abcd36af5867
\ No newline at end of file
diff --git a/db/schema_migrations/20240222000004 b/db/schema_migrations/20240222000004
new file mode 100644
index 0000000000000..9caf000121a37
--- /dev/null
+++ b/db/schema_migrations/20240222000004
@@ -0,0 +1 @@
+39f4d9aaf4a2d22f649fe1f0a75ef1fd4cdd9c0066d4e359c8375e8e301400b4
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 3409e4cdadee0..93a97779afc2f 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -14161,32 +14161,6 @@ CREATE SEQUENCE project_repositories_id_seq
 
 ALTER SEQUENCE project_repositories_id_seq OWNED BY project_repositories.id;
 
-CREATE TABLE project_repository_states (
-    id integer NOT NULL,
-    project_id integer NOT NULL,
-    repository_verification_checksum bytea,
-    wiki_verification_checksum bytea,
-    last_repository_verification_failure character varying,
-    last_wiki_verification_failure character varying,
-    repository_retry_at timestamp with time zone,
-    wiki_retry_at timestamp with time zone,
-    repository_retry_count integer,
-    wiki_retry_count integer,
-    last_repository_verification_ran_at timestamp with time zone,
-    last_wiki_verification_ran_at timestamp with time zone,
-    last_repository_updated_at timestamp with time zone,
-    last_wiki_updated_at timestamp with time zone
-);
-
-CREATE SEQUENCE project_repository_states_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-ALTER SEQUENCE project_repository_states_id_seq OWNED BY project_repository_states.id;
-
 CREATE TABLE project_repository_storage_moves (
     id bigint NOT NULL,
     created_at timestamp with time zone NOT NULL,
@@ -19237,8 +19211,6 @@ ALTER TABLE ONLY project_relation_exports ALTER COLUMN id SET DEFAULT nextval('p
 
 ALTER TABLE ONLY project_repositories ALTER COLUMN id SET DEFAULT nextval('project_repositories_id_seq'::regclass);
 
-ALTER TABLE ONLY project_repository_states ALTER COLUMN id SET DEFAULT nextval('project_repository_states_id_seq'::regclass);
-
 ALTER TABLE ONLY project_repository_storage_moves ALTER COLUMN id SET DEFAULT nextval('project_repository_storage_moves_id_seq'::regclass);
 
 ALTER TABLE ONLY project_security_settings ALTER COLUMN project_id SET DEFAULT nextval('project_security_settings_project_id_seq'::regclass);
@@ -21668,9 +21640,6 @@ ALTER TABLE ONLY project_relation_exports
 ALTER TABLE ONLY project_repositories
     ADD CONSTRAINT project_repositories_pkey PRIMARY KEY (id);
 
-ALTER TABLE ONLY project_repository_states
-    ADD CONSTRAINT project_repository_states_pkey PRIMARY KEY (id);
-
 ALTER TABLE ONLY project_repository_storage_moves
     ADD CONSTRAINT project_repository_storage_moves_pkey PRIMARY KEY (id);
 
@@ -23672,16 +23641,6 @@ CREATE UNIQUE INDEX idx_protected_branch_id_external_approval_rule_id ON externa
 
 CREATE INDEX idx_reminder_frequency_on_work_item_progresses ON work_item_progresses USING btree (reminder_frequency);
 
-CREATE INDEX idx_repository_states_on_last_repository_verification_ran_at ON project_repository_states USING btree (project_id, last_repository_verification_ran_at) WHERE ((repository_verification_checksum IS NOT NULL) AND (last_repository_verification_failure IS NULL));
-
-CREATE INDEX idx_repository_states_on_last_wiki_verification_ran_at ON project_repository_states USING btree (project_id, last_wiki_verification_ran_at) WHERE ((wiki_verification_checksum IS NOT NULL) AND (last_wiki_verification_failure IS NULL));
-
-CREATE INDEX idx_repository_states_on_repository_failure_partial ON project_repository_states USING btree (last_repository_verification_failure) WHERE (last_repository_verification_failure IS NOT NULL);
-
-CREATE INDEX idx_repository_states_on_wiki_failure_partial ON project_repository_states USING btree (last_wiki_verification_failure) WHERE (last_wiki_verification_failure IS NOT NULL);
-
-CREATE INDEX idx_repository_states_outdated_checksums ON project_repository_states USING btree (project_id) WHERE (((repository_verification_checksum IS NULL) AND (last_repository_verification_failure IS NULL)) OR ((wiki_verification_checksum IS NULL) AND (last_wiki_verification_failure IS NULL)));
-
 CREATE INDEX idx_sbom_occurr_on_project_component_version_input_file_path ON sbom_occurrences USING btree (project_id, component_version_id, input_file_path);
 
 CREATE INDEX idx_sbom_occurrences_on_project_id_and_source_id ON sbom_occurrences USING btree (project_id, source_id);
@@ -26272,8 +26231,6 @@ CREATE INDEX index_project_repositories_on_shard_id ON project_repositories USIN
 
 CREATE INDEX index_project_repositories_on_shard_id_and_project_id ON project_repositories USING btree (shard_id, project_id);
 
-CREATE UNIQUE INDEX index_project_repository_states_on_project_id ON project_repository_states USING btree (project_id);
-
 CREATE INDEX index_project_repository_storage_moves_on_project_id ON project_repository_storage_moves USING btree (project_id);
 
 CREATE INDEX index_project_settings_on_legacy_os_license_project_id ON project_settings USING btree (project_id) WHERE (legacy_open_source_license_available = true);
@@ -30546,9 +30503,6 @@ ALTER TABLE ONLY audit_events_google_cloud_logging_configurations
 ALTER TABLE ONLY geo_node_statuses
     ADD CONSTRAINT fk_rails_0ecc699c2a FOREIGN KEY (geo_node_id) REFERENCES geo_nodes(id) ON DELETE CASCADE;
 
-ALTER TABLE ONLY project_repository_states
-    ADD CONSTRAINT fk_rails_0f2298ca8a FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
-
 ALTER TABLE ONLY user_synced_attributes_metadata
     ADD CONSTRAINT fk_rails_0f4aa0981f FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
 
-- 
GitLab