From 782b30208c9297ecb0d55656f8b1cfb1bc6d605b Mon Sep 17 00:00:00 2001 From: Tomasz Skorupa Date: Fri, 17 Oct 2025 07:35:48 -0400 Subject: [PATCH 1/7] Add NOT NULL (NOT VALID) constraint on appearance_uploads Addresses https://gitlab.com/gitlab-org/gitlab/-/issues/398199\#proposal The parent table appearances has the schema gitlab_main_cell_setting. According to our [docs](https://gitlab.com/gitlab-org/gitlab/-/blob/0389bd1aa43581669ee24f36acf17a4975a6fb05/doc/development/cells/_index.md\#available-cells--organization-schemas), these tables will be cell-local and should not have any references to/from organization tables. https://gitlab.com/gitlab-org/gitlab/-/blob/d60329085ac13318b9ed04a395908292eccff5c5/db/docs/appearances.yml\#L10 Changelog: other --- ...t_valid_constraint_to_appearance_uploads.rb | 18 ++++++++++++++++++ db/schema_migrations/20251017110301 | 1 + 2 files changed, 19 insertions(+) create mode 100644 db/migrate/20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb create mode 100644 db/schema_migrations/20251017110301 diff --git a/db/migrate/20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb b/db/migrate/20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb new file mode 100644 index 00000000000000..b6c06f50e2cf3c --- /dev/null +++ b/db/migrate/20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class AddNotNullNotValidConstraintToAppearanceUploads < Gitlab::Database::Migration[2.3] + disable_ddl_transaction! + milestone '18.6' + + def up + add_multi_column_not_null_constraint( + :appearance_uploads, + :organization_id, :namespace_id, :project_id, + limit: 0, validate: false + ) + end + + def down + remove_multi_column_not_null_constraint(:appearance_uploads, :organization_id, :namespace_id, :project_id) + end +end diff --git a/db/schema_migrations/20251017110301 b/db/schema_migrations/20251017110301 new file mode 100644 index 00000000000000..75b8095e1fbdcf --- /dev/null +++ b/db/schema_migrations/20251017110301 @@ -0,0 +1 @@ +dc17eafd599bb369a22a19ceba5449987a6af7fa787bf00496baa569c46becb8 \ No newline at end of file -- GitLab From 28335c50a06d983f29afccd5631332f4928954b4 Mon Sep 17 00:00:00 2001 From: Tomasz Skorupa Date: Fri, 17 Oct 2025 08:30:59 -0400 Subject: [PATCH 2/7] fixup! Add NOT NULL (NOT VALID) constraint on appearance_uploads --- db/structure.sql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/db/structure.sql b/db/structure.sql index 4a8ed4a43b55f3..fe4f0aec35e94f 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -33284,6 +33284,9 @@ ALTER TABLE note_metadata ALTER TABLE ONLY group_type_ci_runners ADD CONSTRAINT check_81b90172a6 UNIQUE (id); +ALTER TABLE appearance_uploads + ADD CONSTRAINT check_84e287699b CHECK ((num_nonnulls(namespace_id, organization_id, project_id) = 0)) NOT VALID; + ALTER TABLE merge_request_cleanup_schedules ADD CONSTRAINT check_8ac5179c82 CHECK ((project_id IS NOT NULL)) NOT VALID; -- GitLab From 74bd0de2b8c1ce5f8a43a3ee9c0959999f3565d3 Mon Sep 17 00:00:00 2001 From: Tomasz Skorupa Date: Mon, 20 Oct 2025 09:40:12 -0400 Subject: [PATCH 3/7] Edit 20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb --- ...01_add_not_null_not_valid_constraint_to_appearance_uploads.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/db/migrate/20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb b/db/migrate/20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb index b6c06f50e2cf3c..8ccf43d21a9d87 100644 --- a/db/migrate/20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb +++ b/db/migrate/20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb @@ -5,6 +5,7 @@ class AddNotNullNotValidConstraintToAppearanceUploads < Gitlab::Database::Migrat milestone '18.6' def up + # NOTE: this constraint enforces that reference columns remain NULL for cell-local architecture compliance add_multi_column_not_null_constraint( :appearance_uploads, :organization_id, :namespace_id, :project_id, -- GitLab From e477ae7551624374b63d9e7acf3285af3db862df Mon Sep 17 00:00:00 2001 From: Tomasz Skorupa Date: Tue, 21 Oct 2025 09:20:19 -0400 Subject: [PATCH 4/7] fixup! fixup! Add NOT NULL (NOT VALID) constraint on appearance_uploads --- ...017110301_add_not_null_constraint_to_appearance_uploads.rb} | 2 +- db/structure.sql | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) rename db/migrate/{20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb => 20251017110301_add_not_null_constraint_to_appearance_uploads.rb} (84%) diff --git a/db/migrate/20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb b/db/migrate/20251017110301_add_not_null_constraint_to_appearance_uploads.rb similarity index 84% rename from db/migrate/20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb rename to db/migrate/20251017110301_add_not_null_constraint_to_appearance_uploads.rb index 8ccf43d21a9d87..c1ed4189b650dd 100644 --- a/db/migrate/20251017110301_add_not_null_not_valid_constraint_to_appearance_uploads.rb +++ b/db/migrate/20251017110301_add_not_null_constraint_to_appearance_uploads.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class AddNotNullNotValidConstraintToAppearanceUploads < Gitlab::Database::Migration[2.3] +class AddNotNullConstraintToAppearanceUploads < Gitlab::Database::Migration[2.3] disable_ddl_transaction! milestone '18.6' diff --git a/db/structure.sql b/db/structure.sql index fe4f0aec35e94f..5cdf97e77eff7f 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -10867,7 +10867,8 @@ CREATE TABLE appearance_uploads ( mount_point text, secret text, CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), - CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)), + CONSTRAINT check_84e287699b CHECK ((num_nonnulls(namespace_id, organization_id, project_id) = 0)) NOT VALID ); CREATE TABLE appearances ( -- GitLab From 1e7f3ea36a9221297e4a23cf32aa3836fd5fc6cf Mon Sep 17 00:00:00 2001 From: Tomasz Skorupa Date: Tue, 21 Oct 2025 09:22:56 -0400 Subject: [PATCH 5/7] fixup! fixup! fixup! Add NOT NULL (NOT VALID) constraint on appearance_uploads --- db/structure.sql | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/db/structure.sql b/db/structure.sql index 5cdf97e77eff7f..49278107252624 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -10868,7 +10868,7 @@ CREATE TABLE appearance_uploads ( secret text, CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)), - CONSTRAINT check_84e287699b CHECK ((num_nonnulls(namespace_id, organization_id, project_id) = 0)) NOT VALID + CONSTRAINT check_84e287699b CHECK ((num_nonnulls(namespace_id, organization_id, project_id) = 0)) ); CREATE TABLE appearances ( @@ -33285,9 +33285,6 @@ ALTER TABLE note_metadata ALTER TABLE ONLY group_type_ci_runners ADD CONSTRAINT check_81b90172a6 UNIQUE (id); -ALTER TABLE appearance_uploads - ADD CONSTRAINT check_84e287699b CHECK ((num_nonnulls(namespace_id, organization_id, project_id) = 0)) NOT VALID; - ALTER TABLE merge_request_cleanup_schedules ADD CONSTRAINT check_8ac5179c82 CHECK ((project_id IS NOT NULL)) NOT VALID; -- GitLab From 569885205eb96864aa04ea8e76f5f099ab70a78c Mon Sep 17 00:00:00 2001 From: Tomasz Skorupa Date: Tue, 21 Oct 2025 09:24:07 -0400 Subject: [PATCH 6/7] fixup! fixup! fixup! fixup! Add NOT NULL (NOT VALID) constraint on appearance_uploads --- ...51017110301_add_not_null_constraint_to_appearance_uploads.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20251017110301_add_not_null_constraint_to_appearance_uploads.rb b/db/migrate/20251017110301_add_not_null_constraint_to_appearance_uploads.rb index c1ed4189b650dd..c609184af8c480 100644 --- a/db/migrate/20251017110301_add_not_null_constraint_to_appearance_uploads.rb +++ b/db/migrate/20251017110301_add_not_null_constraint_to_appearance_uploads.rb @@ -9,7 +9,7 @@ def up add_multi_column_not_null_constraint( :appearance_uploads, :organization_id, :namespace_id, :project_id, - limit: 0, validate: false + limit: 0 ) end -- GitLab From a6bab18b51d8d4f1de829c429dc1e6e40e6ec1d1 Mon Sep 17 00:00:00 2001 From: Tomasz Skorupa Date: Tue, 21 Oct 2025 09:48:05 -0400 Subject: [PATCH 7/7] fixup! fixup! fixup! fixup! fixup! Add NOT NULL (NOT VALID) constraint on appearance_uploads --- db/structure.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/db/structure.sql b/db/structure.sql index 49278107252624..f9f7767d3f4d85 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -10867,8 +10867,8 @@ CREATE TABLE appearance_uploads ( mount_point text, secret text, CONSTRAINT check_2849dedce7 CHECK ((char_length(path) <= 511)), - CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)), - CONSTRAINT check_84e287699b CHECK ((num_nonnulls(namespace_id, organization_id, project_id) = 0)) + CONSTRAINT check_84e287699b CHECK ((num_nonnulls(namespace_id, organization_id, project_id) = 0)), + CONSTRAINT check_b888b1df14 CHECK ((char_length(checksum) <= 64)) ); CREATE TABLE appearances ( -- GitLab