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