diff --git a/db/docs/uploads_9ba88c4165.yml b/db/docs/uploads_9ba88c4165.yml index 7b10c7e1264f953799ae89e7c18f07a3d48732fe..4ac098be77256bac51c3f639df2c436d0eef1296 100644 --- a/db/docs/uploads_9ba88c4165.yml +++ b/db/docs/uploads_9ba88c4165.yml @@ -16,4 +16,9 @@ introduced_by_url: milestone: '17.11' gitlab_schema: gitlab_main_org sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/398199 +sharding_key: + organization_id: organizations + namespace_id: namespaces + project_id: projects + uploaded_by_user_id: users table_size: small diff --git a/db/post_migrate/20251206120000_add_uploads_sharding_key_constraint.rb b/db/post_migrate/20251206120000_add_uploads_sharding_key_constraint.rb new file mode 100644 index 0000000000000000000000000000000000000000..eeb457916fcb83a3dd2ee198e2d18c4d10bbd4ea --- /dev/null +++ b/db/post_migrate/20251206120000_add_uploads_sharding_key_constraint.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class AddUploadsShardingKeyConstraint < Gitlab::Database::Migration[2.3] + milestone '18.7' + disable_ddl_transaction! + + def up + add_multi_column_not_null_constraint( + :uploads_9ba88c4165, + :organization_id, :namespace_id, :project_id, :uploaded_by_user_id + ) + end + + def down + remove_multi_column_not_null_constraint( + :uploads_9ba88c4165, + :organization_id, :namespace_id, :project_id, :uploaded_by_user_id + ) + end +end diff --git a/db/schema_migrations/20251206120000 b/db/schema_migrations/20251206120000 new file mode 100644 index 0000000000000000000000000000000000000000..dae055554b04a66d1d1fab37dd074e326a154556 --- /dev/null +++ b/db/schema_migrations/20251206120000 @@ -0,0 +1 @@ +da68f96d8a4dc82b17bcd6484b09b737822bfa7b51319b4cd0953263570e2ca4 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 39a58ec570850185d08755946ed51475164150e0..c7a51eb84d8ac3d59abaf25bc24e2c0827e31cf3 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -10596,7 +10596,8 @@ CREATE TABLE uploads_9ba88c4165 ( 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_f4b854bf62 CHECK ((num_nonnulls(namespace_id, organization_id, project_id, uploaded_by_user_id) = 1)) ) PARTITION BY LIST (model_type); diff --git a/spec/lib/gitlab/database/sharding_key_spec.rb b/spec/lib/gitlab/database/sharding_key_spec.rb index f37a510e271a37e187065b25452a48f4d3b6c67b..e2707e8993bff0acce1d85ec8e666cc92f1da795 100644 --- a/spec/lib/gitlab/database/sharding_key_spec.rb +++ b/spec/lib/gitlab/database/sharding_key_spec.rb @@ -11,7 +11,6 @@ [ 'ai_settings', # https://gitlab.com/gitlab-org/gitlab/-/issues/531356 'web_hook_logs_daily', # temporary copy of web_hook_logs - 'uploads_9ba88c4165', # https://gitlab.com/gitlab-org/gitlab/-/issues/398199 'merge_request_diff_files_99208b8fac', # has a desired sharding key instead 'award_emoji_archived', # temp table: https://gitlab.com/gitlab-org/gitlab/-/issues/580326 'authentication_event_archived_records' # temp table: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/202447