From b99875b1b9cc525e9fdbac5f606ea590961c4aca Mon Sep 17 00:00:00 2001 From: mo khan Date: Tue, 9 Dec 2025 16:12:23 -0700 Subject: [PATCH 1/4] Add constraint without validation to `user_agent_details` table --- ..._agent_details_organization_id_backfill.rb | 23 +++++++++++++++++++ ...o_user_agent_details_on_organization_id.rb | 14 +++++++++++ ...ils_organization_id_not_null_validation.rb | 14 +++++++++++ db/schema_migrations/20251211191605 | 1 + db/schema_migrations/20251211191607 | 1 + db/schema_migrations/20251211192503 | 1 + db/structure.sql | 3 +++ 7 files changed, 57 insertions(+) create mode 100644 db/post_migrate/20251211191605_finalize_user_agent_details_organization_id_backfill.rb create mode 100644 db/post_migrate/20251211191607_add_not_null_constraint_to_user_agent_details_on_organization_id.rb create mode 100644 db/post_migrate/20251211192503_prepare_user_agent_details_organization_id_not_null_validation.rb create mode 100644 db/schema_migrations/20251211191605 create mode 100644 db/schema_migrations/20251211191607 create mode 100644 db/schema_migrations/20251211192503 diff --git a/db/post_migrate/20251211191605_finalize_user_agent_details_organization_id_backfill.rb b/db/post_migrate/20251211191605_finalize_user_agent_details_organization_id_backfill.rb new file mode 100644 index 00000000000000..add8c739000aba --- /dev/null +++ b/db/post_migrate/20251211191605_finalize_user_agent_details_organization_id_backfill.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class FinalizeUserAgentDetailsOrganizationIdBackfill < Gitlab::Database::Migration[2.3] + disable_ddl_transaction! + milestone '18.8' + restrict_gitlab_migration gitlab_schema: :gitlab_main_org + + MIGRATION = 'BackfillUserAgentDetailsOrganizationId' + + def up + ensure_batched_background_migration_is_finished( + job_class_name: MIGRATION, + table_name: :user_agent_details, + column_name: :id, + job_arguments: [], + finalize: true + ) + end + + def down + # no-op + end +end diff --git a/db/post_migrate/20251211191607_add_not_null_constraint_to_user_agent_details_on_organization_id.rb b/db/post_migrate/20251211191607_add_not_null_constraint_to_user_agent_details_on_organization_id.rb new file mode 100644 index 00000000000000..80143f2071544d --- /dev/null +++ b/db/post_migrate/20251211191607_add_not_null_constraint_to_user_agent_details_on_organization_id.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class AddNotNullConstraintToUserAgentDetailsOnOrganizationId < Gitlab::Database::Migration[2.3] + disable_ddl_transaction! + milestone '18.8' + + def up + add_not_null_constraint :user_agent_details, :organization_id, validate: false + end + + def down + remove_not_null_constraint :user_agent_details, :organization_id + end +end diff --git a/db/post_migrate/20251211192503_prepare_user_agent_details_organization_id_not_null_validation.rb b/db/post_migrate/20251211192503_prepare_user_agent_details_organization_id_not_null_validation.rb new file mode 100644 index 00000000000000..8b646daf24d5a0 --- /dev/null +++ b/db/post_migrate/20251211192503_prepare_user_agent_details_organization_id_not_null_validation.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class PrepareUserAgentDetailsOrganizationIdNotNullValidation < Gitlab::Database::Migration[2.3] + milestone '18.8' + CONSTRAINT_NAME = 'check_17a3a18e31' + + def up + prepare_async_check_constraint_validation :user_agent_details, name: CONSTRAINT_NAME + end + + def down + unprepare_async_check_constraint_validation :user_agent_details, name: CONSTRAINT_NAME + end +end diff --git a/db/schema_migrations/20251211191605 b/db/schema_migrations/20251211191605 new file mode 100644 index 00000000000000..207403f1851aaa --- /dev/null +++ b/db/schema_migrations/20251211191605 @@ -0,0 +1 @@ +332ab9ccd2c3f48de82f46e78465522bee724181faa42a8c15ba3cac3fc51453 \ No newline at end of file diff --git a/db/schema_migrations/20251211191607 b/db/schema_migrations/20251211191607 new file mode 100644 index 00000000000000..a34a8ce4cc488f --- /dev/null +++ b/db/schema_migrations/20251211191607 @@ -0,0 +1 @@ +68e6de13104834384bb109dc04bf7b2c2682250a80ba7c67274efda66d2792af \ No newline at end of file diff --git a/db/schema_migrations/20251211192503 b/db/schema_migrations/20251211192503 new file mode 100644 index 00000000000000..90a5b0f02cab44 --- /dev/null +++ b/db/schema_migrations/20251211192503 @@ -0,0 +1 @@ +32c6a643a5a45dce21b0a35ffabb50edcd6a80c2951f22923aa8c3626a53d4fc \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index df4c50822b7291..3dfd5fb64a4849 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -35047,6 +35047,9 @@ ALTER TABLE epic_issues ALTER TABLE bulk_import_batch_trackers ADD CONSTRAINT check_13004cd9a8 CHECK ((num_nonnulls(namespace_id, organization_id, project_id) = 1)) NOT VALID; +ALTER TABLE user_agent_details + ADD CONSTRAINT check_17a3a18e31 CHECK ((organization_id IS NOT NULL)) NOT VALID; + ALTER TABLE workspaces ADD CONSTRAINT check_2a89035b04 CHECK ((personal_access_token_id IS NOT NULL)) NOT VALID; -- GitLab From 48fecf5039592f9a1d5c98709d5295322b674646 Mon Sep 17 00:00:00 2001 From: mo khan Date: Fri, 12 Dec 2025 16:13:08 -0700 Subject: [PATCH 2/4] Remove outdated spec --- spec/services/spam/akismet_mark_as_spam_service_spec.rb | 6 ------ 1 file changed, 6 deletions(-) diff --git a/spec/services/spam/akismet_mark_as_spam_service_spec.rb b/spec/services/spam/akismet_mark_as_spam_service_spec.rb index aec80227829bac..f07fa8d262b835 100644 --- a/spec/services/spam/akismet_mark_as_spam_service_spec.rb +++ b/spec/services/spam/akismet_mark_as_spam_service_spec.rb @@ -40,12 +40,6 @@ subject.execute end - context 'when an organization is not assigned to the record' do - let(:user_agent_detail) { build(:user_agent_detail, organization: nil) } - - it { expect(subject.execute).to be_truthy } - end - context 'when Akismet does not consider it spam' do it 'does not update the spammable object as spam' do allow(fake_akismet_service).to receive(:submit_spam).and_return false -- GitLab From 97e1fc4309bdf7c8832637e7132b2c8ac0177740 Mon Sep 17 00:00:00 2001 From: mo khan Date: Mon, 15 Dec 2025 13:54:40 -0700 Subject: [PATCH 3/4] Refresh migration timestamps --- ...5262_finalize_user_agent_details_organization_id_backfill.rb} | 0 ..._null_constraint_to_user_agent_details_on_organization_id.rb} | 0 ...re_user_agent_details_organization_id_not_null_validation.rb} | 0 db/schema_migrations/20251211191605 | 1 - db/schema_migrations/20251211191607 | 1 - db/schema_migrations/20251211192503 | 1 - db/schema_migrations/20251215205262 | 1 + db/schema_migrations/20251215205265 | 1 + db/schema_migrations/20251215205270 | 1 + 9 files changed, 3 insertions(+), 3 deletions(-) rename db/post_migrate/{20251211191605_finalize_user_agent_details_organization_id_backfill.rb => 20251215205262_finalize_user_agent_details_organization_id_backfill.rb} (100%) rename db/post_migrate/{20251211191607_add_not_null_constraint_to_user_agent_details_on_organization_id.rb => 20251215205265_add_not_null_constraint_to_user_agent_details_on_organization_id.rb} (100%) rename db/post_migrate/{20251211192503_prepare_user_agent_details_organization_id_not_null_validation.rb => 20251215205270_prepare_user_agent_details_organization_id_not_null_validation.rb} (100%) delete mode 100644 db/schema_migrations/20251211191605 delete mode 100644 db/schema_migrations/20251211191607 delete mode 100644 db/schema_migrations/20251211192503 create mode 100644 db/schema_migrations/20251215205262 create mode 100644 db/schema_migrations/20251215205265 create mode 100644 db/schema_migrations/20251215205270 diff --git a/db/post_migrate/20251211191605_finalize_user_agent_details_organization_id_backfill.rb b/db/post_migrate/20251215205262_finalize_user_agent_details_organization_id_backfill.rb similarity index 100% rename from db/post_migrate/20251211191605_finalize_user_agent_details_organization_id_backfill.rb rename to db/post_migrate/20251215205262_finalize_user_agent_details_organization_id_backfill.rb diff --git a/db/post_migrate/20251211191607_add_not_null_constraint_to_user_agent_details_on_organization_id.rb b/db/post_migrate/20251215205265_add_not_null_constraint_to_user_agent_details_on_organization_id.rb similarity index 100% rename from db/post_migrate/20251211191607_add_not_null_constraint_to_user_agent_details_on_organization_id.rb rename to db/post_migrate/20251215205265_add_not_null_constraint_to_user_agent_details_on_organization_id.rb diff --git a/db/post_migrate/20251211192503_prepare_user_agent_details_organization_id_not_null_validation.rb b/db/post_migrate/20251215205270_prepare_user_agent_details_organization_id_not_null_validation.rb similarity index 100% rename from db/post_migrate/20251211192503_prepare_user_agent_details_organization_id_not_null_validation.rb rename to db/post_migrate/20251215205270_prepare_user_agent_details_organization_id_not_null_validation.rb diff --git a/db/schema_migrations/20251211191605 b/db/schema_migrations/20251211191605 deleted file mode 100644 index 207403f1851aaa..00000000000000 --- a/db/schema_migrations/20251211191605 +++ /dev/null @@ -1 +0,0 @@ -332ab9ccd2c3f48de82f46e78465522bee724181faa42a8c15ba3cac3fc51453 \ No newline at end of file diff --git a/db/schema_migrations/20251211191607 b/db/schema_migrations/20251211191607 deleted file mode 100644 index a34a8ce4cc488f..00000000000000 --- a/db/schema_migrations/20251211191607 +++ /dev/null @@ -1 +0,0 @@ -68e6de13104834384bb109dc04bf7b2c2682250a80ba7c67274efda66d2792af \ No newline at end of file diff --git a/db/schema_migrations/20251211192503 b/db/schema_migrations/20251211192503 deleted file mode 100644 index 90a5b0f02cab44..00000000000000 --- a/db/schema_migrations/20251211192503 +++ /dev/null @@ -1 +0,0 @@ -32c6a643a5a45dce21b0a35ffabb50edcd6a80c2951f22923aa8c3626a53d4fc \ No newline at end of file diff --git a/db/schema_migrations/20251215205262 b/db/schema_migrations/20251215205262 new file mode 100644 index 00000000000000..bcbc132ec067e5 --- /dev/null +++ b/db/schema_migrations/20251215205262 @@ -0,0 +1 @@ +c46c4671c35684946e97275a11ee645a7d0aa29ca00421430b83232e931d21a1 \ No newline at end of file diff --git a/db/schema_migrations/20251215205265 b/db/schema_migrations/20251215205265 new file mode 100644 index 00000000000000..19678bffe6d655 --- /dev/null +++ b/db/schema_migrations/20251215205265 @@ -0,0 +1 @@ +630bb6fd777f150d726835b50a5ba12882e5222646e9d0bcb817d301457811b8 \ No newline at end of file diff --git a/db/schema_migrations/20251215205270 b/db/schema_migrations/20251215205270 new file mode 100644 index 00000000000000..544e7d67006164 --- /dev/null +++ b/db/schema_migrations/20251215205270 @@ -0,0 +1 @@ +36a103f7975527b41fb3d6b92a531d9f1caf5b2ccca75a61f1dff59fe132c711 \ No newline at end of file -- GitLab From 17018a1391a63fb4347520edfd1ae1f4ed0fcd25 Mon Sep 17 00:00:00 2001 From: mo khan Date: Mon, 15 Dec 2025 14:53:54 -0700 Subject: [PATCH 4/4] Update milestones to 18.9 --- ...5262_finalize_user_agent_details_organization_id_backfill.rb | 2 +- ..._null_constraint_to_user_agent_details_on_organization_id.rb | 2 +- ...re_user_agent_details_organization_id_not_null_validation.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/db/post_migrate/20251215205262_finalize_user_agent_details_organization_id_backfill.rb b/db/post_migrate/20251215205262_finalize_user_agent_details_organization_id_backfill.rb index add8c739000aba..660c4fc3e26029 100644 --- a/db/post_migrate/20251215205262_finalize_user_agent_details_organization_id_backfill.rb +++ b/db/post_migrate/20251215205262_finalize_user_agent_details_organization_id_backfill.rb @@ -2,7 +2,7 @@ class FinalizeUserAgentDetailsOrganizationIdBackfill < Gitlab::Database::Migration[2.3] disable_ddl_transaction! - milestone '18.8' + milestone '18.9' restrict_gitlab_migration gitlab_schema: :gitlab_main_org MIGRATION = 'BackfillUserAgentDetailsOrganizationId' diff --git a/db/post_migrate/20251215205265_add_not_null_constraint_to_user_agent_details_on_organization_id.rb b/db/post_migrate/20251215205265_add_not_null_constraint_to_user_agent_details_on_organization_id.rb index 80143f2071544d..b87793dade4f61 100644 --- a/db/post_migrate/20251215205265_add_not_null_constraint_to_user_agent_details_on_organization_id.rb +++ b/db/post_migrate/20251215205265_add_not_null_constraint_to_user_agent_details_on_organization_id.rb @@ -2,7 +2,7 @@ class AddNotNullConstraintToUserAgentDetailsOnOrganizationId < Gitlab::Database::Migration[2.3] disable_ddl_transaction! - milestone '18.8' + milestone '18.9' def up add_not_null_constraint :user_agent_details, :organization_id, validate: false diff --git a/db/post_migrate/20251215205270_prepare_user_agent_details_organization_id_not_null_validation.rb b/db/post_migrate/20251215205270_prepare_user_agent_details_organization_id_not_null_validation.rb index 8b646daf24d5a0..44b79d4dcc0e98 100644 --- a/db/post_migrate/20251215205270_prepare_user_agent_details_organization_id_not_null_validation.rb +++ b/db/post_migrate/20251215205270_prepare_user_agent_details_organization_id_not_null_validation.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class PrepareUserAgentDetailsOrganizationIdNotNullValidation < Gitlab::Database::Migration[2.3] - milestone '18.8' + milestone '18.9' CONSTRAINT_NAME = 'check_17a3a18e31' def up -- GitLab