From 57f8876de82afe4efb629003504c409435b00d0b Mon Sep 17 00:00:00 2001 From: moaz-khalifa <mkhalifa@gitlab.com> Date: Fri, 23 Aug 2024 14:14:34 +0200 Subject: [PATCH] Convert upstream_id in virtual_registries_packages_maven_cached_responses into LFK --- config/gitlab_loose_foreign_keys.yml | 4 +++ ..._packages_maven_upstream_record_changes.rb | 15 ++++++++++ ...kgs_mvn_cached_responses_upstream_id_fk.rb | 30 +++++++++++++++++++ db/schema_migrations/20240823110954 | 1 + db/schema_migrations/20240823113710 | 1 + db/structure.sql | 5 ++-- .../packages/maven/cached_responses.rb | 2 +- .../packages/maven/cached_response_spec.rb | 7 +++++ .../packages/maven/upstream_spec.rb | 4 +++ 9 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 db/post_migrate/20240823110954_track_virtual_registries_packages_maven_upstream_record_changes.rb create mode 100644 db/post_migrate/20240823113710_remove_vregs_pkgs_mvn_upstreams_vregs_pkgs_mvn_cached_responses_upstream_id_fk.rb create mode 100644 db/schema_migrations/20240823110954 create mode 100644 db/schema_migrations/20240823113710 diff --git a/config/gitlab_loose_foreign_keys.yml b/config/gitlab_loose_foreign_keys.yml index 5230cfc985ab1..c8d0fc02debe1 100644 --- a/config/gitlab_loose_foreign_keys.yml +++ b/config/gitlab_loose_foreign_keys.yml @@ -466,6 +466,10 @@ user_details: - table: namespaces column: enterprise_group_id on_delete: async_nullify +virtual_registries_packages_maven_cached_responses: + - table: virtual_registries_packages_maven_upstreams + column: upstream_id + on_delete: async_nullify vulnerability_export_parts: - table: organizations column: organization_id diff --git a/db/post_migrate/20240823110954_track_virtual_registries_packages_maven_upstream_record_changes.rb b/db/post_migrate/20240823110954_track_virtual_registries_packages_maven_upstream_record_changes.rb new file mode 100644 index 0000000000000..ef4045a31e3ad --- /dev/null +++ b/db/post_migrate/20240823110954_track_virtual_registries_packages_maven_upstream_record_changes.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class TrackVirtualRegistriesPackagesMavenUpstreamRecordChanges < Gitlab::Database::Migration[2.2] + include Gitlab::Database::MigrationHelpers::LooseForeignKeyHelpers + + milestone '17.4' + + def up + track_record_deletions(:virtual_registries_packages_maven_upstreams) + end + + def down + untrack_record_deletions(:virtual_registries_packages_maven_upstreams) + end +end diff --git a/db/post_migrate/20240823113710_remove_vregs_pkgs_mvn_upstreams_vregs_pkgs_mvn_cached_responses_upstream_id_fk.rb b/db/post_migrate/20240823113710_remove_vregs_pkgs_mvn_upstreams_vregs_pkgs_mvn_cached_responses_upstream_id_fk.rb new file mode 100644 index 0000000000000..0ffb64f3d4468 --- /dev/null +++ b/db/post_migrate/20240823113710_remove_vregs_pkgs_mvn_upstreams_vregs_pkgs_mvn_cached_responses_upstream_id_fk.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +class RemoveVregsPkgsMvnUpstreamsVregsPkgsMvnCachedResponsesUpstreamIdFk < Gitlab::Database::Migration[2.2] + milestone '17.4' + disable_ddl_transaction! + + FOREIGN_KEY_NAME = 'fk_rails_1167f21441' + + def up + with_lock_retries do + remove_foreign_key_if_exists( + :virtual_registries_packages_maven_cached_responses, + :virtual_registries_packages_maven_upstreams, + name: FOREIGN_KEY_NAME, + reverse_lock_order: true + ) + end + end + + def down + add_concurrent_foreign_key( + :virtual_registries_packages_maven_cached_responses, + :virtual_registries_packages_maven_upstreams, + name: FOREIGN_KEY_NAME, + column: :upstream_id, + target_column: :id, + on_delete: :nullify + ) + end +end diff --git a/db/schema_migrations/20240823110954 b/db/schema_migrations/20240823110954 new file mode 100644 index 0000000000000..37a10ff1b100a --- /dev/null +++ b/db/schema_migrations/20240823110954 @@ -0,0 +1 @@ +a64beea59b93163168802d44712c9637dbb255792feb1aed84025ea7dc03ccc7 \ No newline at end of file diff --git a/db/schema_migrations/20240823113710 b/db/schema_migrations/20240823113710 new file mode 100644 index 0000000000000..c5de49c1becf1 --- /dev/null +++ b/db/schema_migrations/20240823113710 @@ -0,0 +1 @@ +1254dd3a1d7e28ab9866877ad278d370c93949d7f0dd9973283c745e4fe5cdf8 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 6ca4b98c2d638..106d4967753c8 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -32874,6 +32874,8 @@ CREATE TRIGGER trigger_update_vulnerability_reads_on_vulnerability_update AFTER CREATE TRIGGER users_loose_fk_trigger AFTER DELETE ON users REFERENCING OLD TABLE AS old_table FOR EACH STATEMENT EXECUTE FUNCTION insert_into_loose_foreign_keys_deleted_records(); +CREATE TRIGGER virtual_registries_packages_maven_upstreams_loose_fk_trigger AFTER DELETE ON virtual_registries_packages_maven_upstreams REFERENCING OLD TABLE AS old_table FOR EACH STATEMENT EXECUTE FUNCTION insert_into_loose_foreign_keys_deleted_records(); + ALTER TABLE ONLY deployments ADD CONSTRAINT fk_009fd21147 FOREIGN KEY (environment_id) REFERENCES environments(id) ON DELETE CASCADE; @@ -34599,9 +34601,6 @@ ALTER TABLE ONLY ci_sources_projects ALTER TABLE ONLY ci_sources_projects ADD CONSTRAINT fk_rails_10a1eb379a_p_tmp FOREIGN KEY (partition_id, pipeline_id) REFERENCES p_ci_pipelines(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE NOT VALID; -ALTER TABLE ONLY virtual_registries_packages_maven_cached_responses - ADD CONSTRAINT fk_rails_1167f21441 FOREIGN KEY (upstream_id) REFERENCES virtual_registries_packages_maven_upstreams(id) ON DELETE SET NULL; - ALTER TABLE ONLY zoom_meetings ADD CONSTRAINT fk_rails_1190f0e0fa FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; diff --git a/spec/factories/virtual_registries/packages/maven/cached_responses.rb b/spec/factories/virtual_registries/packages/maven/cached_responses.rb index bd16e4892e853..0a407638a4e02 100644 --- a/spec/factories/virtual_registries/packages/maven/cached_responses.rb +++ b/spec/factories/virtual_registries/packages/maven/cached_responses.rb @@ -5,7 +5,7 @@ class: 'VirtualRegistries::Packages::Maven::CachedResponse' do upstream { association :virtual_registries_packages_maven_upstream } group { upstream.group } - relative_path { '/a/relative/path/test.txt' } + relative_path { |n| "/a/relative/path/test-#{n}.txt" } size { 1.kilobyte } upstream_etag { OpenSSL::Digest.hexdigest('SHA256', 'test') } content_type { 'text/plain' } diff --git a/spec/models/virtual_registries/packages/maven/cached_response_spec.rb b/spec/models/virtual_registries/packages/maven/cached_response_spec.rb index b4cd3e176e9f4..a532771b5521e 100644 --- a/spec/models/virtual_registries/packages/maven/cached_response_spec.rb +++ b/spec/models/virtual_registries/packages/maven/cached_response_spec.rb @@ -114,4 +114,11 @@ it { is_expected.to contain_exactly(cached_response) } end end + + context 'with loose foreign key on virtual_registries_packages_maven_cached_responses.upstream_id' do + it_behaves_like 'cleanup by a loose foreign key' do + let_it_be(:parent) { create(:virtual_registries_packages_maven_upstream) } + let_it_be(:model) { create(:virtual_registries_packages_maven_cached_response, upstream: parent) } + end + end end diff --git a/spec/models/virtual_registries/packages/maven/upstream_spec.rb b/spec/models/virtual_registries/packages/maven/upstream_spec.rb index f70fa4108c256..c19f30ebef8f8 100644 --- a/spec/models/virtual_registries/packages/maven/upstream_spec.rb +++ b/spec/models/virtual_registries/packages/maven/upstream_spec.rb @@ -7,6 +7,10 @@ subject(:upstream) { build(:virtual_registries_packages_maven_upstream) } + it_behaves_like 'it has loose foreign keys' do + let(:factory_name) { :virtual_registries_packages_maven_upstream } + end + describe 'associations' do it do is_expected.to have_many(:cached_responses) -- GitLab