From c00b83139f43fcedb6b99760c31ca86f29237b28 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Zaj=C4=85c?= <mzajac@gitlab.com>
Date: Mon, 11 Dec 2023 15:40:52 +0000
Subject: [PATCH] Synchronous index creation to support finding_id backfill

Changelog: added
---
 ...upporting_index_for_finding_id_backfill.rb | 25 +++++++++++++++++++
 db/schema_migrations/20231206142250           |  1 +
 db/structure.sql                              |  2 ++
 ee/spec/models/ee/vulnerability_spec.rb       |  2 +-
 4 files changed, 29 insertions(+), 1 deletion(-)
 create mode 100644 db/post_migrate/20231206142250_sync_create_supporting_index_for_finding_id_backfill.rb
 create mode 100644 db/schema_migrations/20231206142250

diff --git a/db/post_migrate/20231206142250_sync_create_supporting_index_for_finding_id_backfill.rb b/db/post_migrate/20231206142250_sync_create_supporting_index_for_finding_id_backfill.rb
new file mode 100644
index 000000000000..1371674a8d91
--- /dev/null
+++ b/db/post_migrate/20231206142250_sync_create_supporting_index_for_finding_id_backfill.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+class SyncCreateSupportingIndexForFindingIdBackfill < Gitlab::Database::Migration[2.2]
+  milestone '16.7'
+
+  disable_ddl_transaction!
+
+  INDEX_NAME = "tmp_index_vulnerabilities_on_id_finding_id_empty"
+
+  def up
+    add_concurrent_index(
+      :vulnerabilities,
+      :id,
+      where: "finding_id IS NULL",
+      name: INDEX_NAME
+    )
+  end
+
+  def down
+    remove_concurrent_index_by_name(
+      :vulnerabilities,
+      INDEX_NAME
+    )
+  end
+end
diff --git a/db/schema_migrations/20231206142250 b/db/schema_migrations/20231206142250
new file mode 100644
index 000000000000..547e11e29fd2
--- /dev/null
+++ b/db/schema_migrations/20231206142250
@@ -0,0 +1 @@
+4d8f16d926fc141a72a9d25f200dfe345f3bb4cff3cd8c71f4b4792df445119c
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index a6a80d9e7732..da8c21bff1dc 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -35335,6 +35335,8 @@ CREATE INDEX tmp_index_project_statistics_cont_registry_size ON project_statisti
 
 CREATE INDEX tmp_index_project_statistics_updated_at ON project_statistics USING btree (project_id, updated_at) WHERE (repository_size > 0);
 
+CREATE INDEX tmp_index_vulnerabilities_on_id_finding_id_empty ON vulnerabilities USING btree (id) WHERE (finding_id IS NULL);
+
 CREATE INDEX tmp_index_vulnerability_dismissal_info ON vulnerabilities USING btree (id) WHERE ((state = 2) AND ((dismissed_at IS NULL) OR (dismissed_by_id IS NULL)));
 
 CREATE INDEX tmp_index_vulnerability_overlong_title_html ON vulnerabilities USING btree (id) WHERE (length(title_html) > 800);
diff --git a/ee/spec/models/ee/vulnerability_spec.rb b/ee/spec/models/ee/vulnerability_spec.rb
index 9628a8698aa0..a985c46b5935 100644
--- a/ee/spec/models/ee/vulnerability_spec.rb
+++ b/ee/spec/models/ee/vulnerability_spec.rb
@@ -29,7 +29,7 @@
   let_it_be(:vulnerability) { create(:vulnerability, :sast, :confirmed, :low, :with_state_transition, project: project) }
   let_it_be(:finding) { create(:vulnerabilities_finding, vulnerability: vulnerability) }
 
-  it { is_expected.to have_locked_schema('5a36734541ebab0070a5f5e2b67761be8522357d175a0c7a43aaacedf9603f7c').reference('https://gitlab.com/gitlab-org/gitlab/-/issues/349315') }
+  it { is_expected.to have_locked_schema('acd1e63fcaaeba6f545d3420da5f3407914227b57ff584bb98b5c3f2e0411877').reference('https://gitlab.com/gitlab-org/gitlab/-/issues/349315') }
 
   it_behaves_like 'vulnerability and finding shared examples' do
     let(:transformer_method) { :itself }
-- 
GitLab