From d3c10c247191d0de6a27fa87a6437dc94a5a88eb Mon Sep 17 00:00:00 2001 From: Tomasz Skorupa Date: Tue, 14 Oct 2025 14:40:56 -0400 Subject: [PATCH] Add sharding key triggers to uploads partitions Addresses https://gitlab.com/gitlab-org/gitlab/-/issues/398199 Changelog: other --- app/models/abuse_report.rb | 2 +- app/models/user.rb | 2 +- db/docs/abuse_report_uploads.yml | 3 +- .../user_permission_export_upload_uploads.yml | 3 +- db/docs/user_uploads.yml | 2 +- ...ding_key_trigger_on_achievement_uploads.rb | 31 ++ ...ng_key_trigger_on_ai_vectorizable_files.rb | 31 ++ ...t_management_alert_metric_image_uploads.rb | 31 ++ ...er_to_bulk_import_export_upload_uploads.rb | 47 +++ ...trigger_to_import_export_upload_uploads.rb | 47 +++ ...ger_to_design_management_action_uploads.rb | 31 ++ ...rigger_to_issuable_metric_image_uploads.rb | 31 ++ ...arding_key_trigger_to_namespace_uploads.rb | 31 ++ ..._trigger_to_organization_detail_uploads.rb | 32 ++ ...t_export_relation_export_upload_uploads.rb | 34 ++ ...ng_key_trigger_to_project_topic_uploads.rb | 31 ++ ...sharding_key_trigger_to_project_uploads.rb | 31 ++ ...sharding_key_trigger_to_snippet_uploads.rb | 31 ++ ...to_userpermission_export_upload_uploads.rb | 31 ++ ...ing_key_trigger_to_abuse_report_uploads.rb | 31 ++ ...dd_sharding_key_trigger_to_user_uploads.rb | 31 ++ db/schema_migrations/20251118165156 | 1 + db/schema_migrations/20251118165159 | 1 + db/schema_migrations/20251118165164 | 1 + db/schema_migrations/20251118165169 | 1 + db/schema_migrations/20251118165171 | 1 + db/schema_migrations/20251118165174 | 1 + db/schema_migrations/20251118165177 | 1 + db/schema_migrations/20251118165181 | 1 + db/schema_migrations/20251118165183 | 1 + db/schema_migrations/20251118165187 | 1 + db/schema_migrations/20251118165189 | 1 + db/schema_migrations/20251118165192 | 1 + db/schema_migrations/20251118165194 | 1 + db/schema_migrations/20251118165198 | 1 + db/schema_migrations/20251118165202 | 1 + db/schema_migrations/20251118165207 | 1 + db/structure.sql | 324 ++++++++++++++++++ .../dependencies/dependency_list_export.rb | 2 + .../models/user_permission_export_upload.rb | 2 +- .../dependency_list_export_spec.rb | 7 +- .../user_permission_export_upload_spec.rb | 6 +- spec/lib/gitlab/database/sharding_key_spec.rb | 7 +- spec/models/abuse_report_spec.rb | 4 +- spec/models/upload_spec.rb | 4 +- spec/models/user_spec.rb | 2 +- spec/uploaders/avatar_uploader_spec.rb | 2 +- spec/uploaders/object_storage_spec.rb | 2 +- spec/uploaders/records_uploads_spec.rb | 4 +- 49 files changed, 903 insertions(+), 23 deletions(-) create mode 100644 db/migrate/20251118165156_add_sharding_key_trigger_on_achievement_uploads.rb create mode 100644 db/migrate/20251118165159_add_sharding_key_trigger_on_ai_vectorizable_files.rb create mode 100644 db/migrate/20251118165164_add_sharding_key_trigger_to_alert_management_alert_metric_image_uploads.rb create mode 100644 db/migrate/20251118165169_add_sharding_key_trigger_to_bulk_import_export_upload_uploads.rb create mode 100644 db/migrate/20251118165171_add_sharding_key_trigger_to_import_export_upload_uploads.rb create mode 100644 db/migrate/20251118165174_add_sharding_key_trigger_to_design_management_action_uploads.rb create mode 100644 db/migrate/20251118165177_add_sharding_key_trigger_to_issuable_metric_image_uploads.rb create mode 100644 db/migrate/20251118165181_add_sharding_key_trigger_to_namespace_uploads.rb create mode 100644 db/migrate/20251118165183_add_sharding_key_trigger_to_organization_detail_uploads.rb create mode 100644 db/migrate/20251118165187_add_sharding_key_trigger_to_project_import_export_relation_export_upload_uploads.rb create mode 100644 db/migrate/20251118165189_add_sharding_key_trigger_to_project_topic_uploads.rb create mode 100644 db/migrate/20251118165192_add_sharding_key_trigger_to_project_uploads.rb create mode 100644 db/migrate/20251118165194_add_sharding_key_trigger_to_snippet_uploads.rb create mode 100644 db/migrate/20251118165198_add_sharding_key_trigger_to_userpermission_export_upload_uploads.rb create mode 100644 db/migrate/20251118165202_add_sharding_key_trigger_to_abuse_report_uploads.rb create mode 100644 db/migrate/20251118165207_add_sharding_key_trigger_to_user_uploads.rb create mode 100644 db/schema_migrations/20251118165156 create mode 100644 db/schema_migrations/20251118165159 create mode 100644 db/schema_migrations/20251118165164 create mode 100644 db/schema_migrations/20251118165169 create mode 100644 db/schema_migrations/20251118165171 create mode 100644 db/schema_migrations/20251118165174 create mode 100644 db/schema_migrations/20251118165177 create mode 100644 db/schema_migrations/20251118165181 create mode 100644 db/schema_migrations/20251118165183 create mode 100644 db/schema_migrations/20251118165187 create mode 100644 db/schema_migrations/20251118165189 create mode 100644 db/schema_migrations/20251118165192 create mode 100644 db/schema_migrations/20251118165194 create mode 100644 db/schema_migrations/20251118165198 create mode 100644 db/schema_migrations/20251118165202 create mode 100644 db/schema_migrations/20251118165207 diff --git a/app/models/abuse_report.rb b/app/models/abuse_report.rb index 52e4b1f3b18e9b..9c1fad0c8e66c8 100644 --- a/app/models/abuse_report.rb +++ b/app/models/abuse_report.rb @@ -168,7 +168,7 @@ def project end def uploads_sharding_key - {} + { organization_id: organization_id } end private diff --git a/app/models/user.rb b/app/models/user.rb index 2248648998b702..f7e76cf7c08bb0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2743,7 +2743,7 @@ def supports_saved_replies? end def uploads_sharding_key - {} + { organization_id: organization_id } end def add_admin_note(new_note) diff --git a/db/docs/abuse_report_uploads.yml b/db/docs/abuse_report_uploads.yml index a2fdff72c8a0e4..ee6154fcf6886e 100644 --- a/db/docs/abuse_report_uploads.yml +++ b/db/docs/abuse_report_uploads.yml @@ -10,4 +10,5 @@ introduced_by_url: milestone: '17.11' gitlab_schema: gitlab_main_org table_size: small -sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/398199 +sharding_key: + organization_id: organizations diff --git a/db/docs/user_permission_export_upload_uploads.yml b/db/docs/user_permission_export_upload_uploads.yml index 5abb8aa00e9be6..12f28d20924087 100644 --- a/db/docs/user_permission_export_upload_uploads.yml +++ b/db/docs/user_permission_export_upload_uploads.yml @@ -10,4 +10,5 @@ introduced_by_url: milestone: '17.11' table_size: small gitlab_schema: gitlab_main_user -sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/398199 +sharding_key: + uploaded_by_user_id: users diff --git a/db/docs/user_uploads.yml b/db/docs/user_uploads.yml index 63b0731fc547d4..7b5676c452dafc 100644 --- a/db/docs/user_uploads.yml +++ b/db/docs/user_uploads.yml @@ -11,4 +11,4 @@ milestone: '17.11' table_size: small gitlab_schema: gitlab_main_user sharding_key: - model_id: users + organization_id: organizations diff --git a/db/migrate/20251118165156_add_sharding_key_trigger_on_achievement_uploads.rb b/db/migrate/20251118165156_add_sharding_key_trigger_on_achievement_uploads.rb new file mode 100644 index 00000000000000..0cbc7ec922ed04 --- /dev/null +++ b/db/migrate/20251118165156_add_sharding_key_trigger_on_achievement_uploads.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerOnAchievementUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :achievement_uploads + SHARDING_KEY = :namespace_id + PARENT_TABLE = :achievements + PARENT_SHARDING_KEY = :namespace_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165159_add_sharding_key_trigger_on_ai_vectorizable_files.rb b/db/migrate/20251118165159_add_sharding_key_trigger_on_ai_vectorizable_files.rb new file mode 100644 index 00000000000000..3661d32df88a2a --- /dev/null +++ b/db/migrate/20251118165159_add_sharding_key_trigger_on_ai_vectorizable_files.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerOnAiVectorizableFiles < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :ai_vectorizable_file_uploads + SHARDING_KEY = :project_id + PARENT_TABLE = :ai_vectorizable_files + PARENT_SHARDING_KEY = :project_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165164_add_sharding_key_trigger_to_alert_management_alert_metric_image_uploads.rb b/db/migrate/20251118165164_add_sharding_key_trigger_to_alert_management_alert_metric_image_uploads.rb new file mode 100644 index 00000000000000..1d55d83da31c25 --- /dev/null +++ b/db/migrate/20251118165164_add_sharding_key_trigger_to_alert_management_alert_metric_image_uploads.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToAlertManagementAlertMetricImageUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :alert_management_alert_metric_image_uploads + SHARDING_KEY = :project_id + PARENT_TABLE = :alert_management_alert_metric_images + PARENT_SHARDING_KEY = :project_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165169_add_sharding_key_trigger_to_bulk_import_export_upload_uploads.rb b/db/migrate/20251118165169_add_sharding_key_trigger_to_bulk_import_export_upload_uploads.rb new file mode 100644 index 00000000000000..58e4b6456d04e3 --- /dev/null +++ b/db/migrate/20251118165169_add_sharding_key_trigger_to_bulk_import_export_upload_uploads.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToBulkImportExportUploadUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :bulk_import_export_upload_uploads + SHARDING_KEY_1 = :namespace_id + SHARDING_KEY_2 = :project_id + PARENT_TABLE = :bulk_import_export_uploads + PARENT_SHARDING_KEY_1 = :group_id + PARENT_SHARDING_KEY_2 = :project_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY_1, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY_1, + foreign_key: FOREIGN_KEY + ) + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY_2, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY_2, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY_2, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY_2, + foreign_key: FOREIGN_KEY + ) + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY_1, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY_1, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165171_add_sharding_key_trigger_to_import_export_upload_uploads.rb b/db/migrate/20251118165171_add_sharding_key_trigger_to_import_export_upload_uploads.rb new file mode 100644 index 00000000000000..aecec13ed21566 --- /dev/null +++ b/db/migrate/20251118165171_add_sharding_key_trigger_to_import_export_upload_uploads.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToImportExportUploadUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :import_export_upload_uploads + SHARDING_KEY_1 = :project_id + SHARDING_KEY_2 = :namespace_id + PARENT_TABLE = :import_export_uploads + PARENT_SHARDING_KEY_1 = :project_id + PARENT_SHARDING_KEY_2 = :group_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY_1, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY_1, + foreign_key: FOREIGN_KEY + ) + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY_2, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY_2, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY_2, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY_2, + foreign_key: FOREIGN_KEY + ) + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY_1, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY_1, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165174_add_sharding_key_trigger_to_design_management_action_uploads.rb b/db/migrate/20251118165174_add_sharding_key_trigger_to_design_management_action_uploads.rb new file mode 100644 index 00000000000000..913bde7df2ee89 --- /dev/null +++ b/db/migrate/20251118165174_add_sharding_key_trigger_to_design_management_action_uploads.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToDesignManagementActionUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :design_management_action_uploads + SHARDING_KEY = :namespace_id + PARENT_TABLE = :design_management_designs_versions + PARENT_SHARDING_KEY = :namespace_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165177_add_sharding_key_trigger_to_issuable_metric_image_uploads.rb b/db/migrate/20251118165177_add_sharding_key_trigger_to_issuable_metric_image_uploads.rb new file mode 100644 index 00000000000000..2f6fd9aec65df9 --- /dev/null +++ b/db/migrate/20251118165177_add_sharding_key_trigger_to_issuable_metric_image_uploads.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToIssuableMetricImageUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :issuable_metric_image_uploads + SHARDING_KEY = :namespace_id + PARENT_TABLE = :issuable_metric_images + PARENT_SHARDING_KEY = :namespace_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165181_add_sharding_key_trigger_to_namespace_uploads.rb b/db/migrate/20251118165181_add_sharding_key_trigger_to_namespace_uploads.rb new file mode 100644 index 00000000000000..3000d16cf87fcb --- /dev/null +++ b/db/migrate/20251118165181_add_sharding_key_trigger_to_namespace_uploads.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToNamespaceUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :namespace_uploads + SHARDING_KEY = :namespace_id + PARENT_TABLE = :namespaces + PARENT_SHARDING_KEY = :id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165183_add_sharding_key_trigger_to_organization_detail_uploads.rb b/db/migrate/20251118165183_add_sharding_key_trigger_to_organization_detail_uploads.rb new file mode 100644 index 00000000000000..4b80df194801e8 --- /dev/null +++ b/db/migrate/20251118165183_add_sharding_key_trigger_to_organization_detail_uploads.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToOrganizationDetailUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :organization_detail_uploads + SHARDING_KEY = :organization_id + PARENT_TABLE = :organization_details + PARENT_SHARDING_KEY = :organization_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY, + parent_table_primary_key: :organization_id + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165187_add_sharding_key_trigger_to_project_import_export_relation_export_upload_uploads.rb b/db/migrate/20251118165187_add_sharding_key_trigger_to_project_import_export_relation_export_upload_uploads.rb new file mode 100644 index 00000000000000..eaaa61e1e74dd2 --- /dev/null +++ b/db/migrate/20251118165187_add_sharding_key_trigger_to_project_import_export_relation_export_upload_uploads.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +# See https://docs.gitlab.com/ee/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class AddShardingKeyTriggerToProjectImportExportRelationExportUploadUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :project_import_export_relation_export_upload_uploads + SHARDING_KEY = :project_id + PARENT_TABLE = :project_relation_export_uploads + PARENT_SHARDING_KEY = :project_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165189_add_sharding_key_trigger_to_project_topic_uploads.rb b/db/migrate/20251118165189_add_sharding_key_trigger_to_project_topic_uploads.rb new file mode 100644 index 00000000000000..b597e0a58c1165 --- /dev/null +++ b/db/migrate/20251118165189_add_sharding_key_trigger_to_project_topic_uploads.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToProjectTopicUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :project_topic_uploads + SHARDING_KEY = :organization_id + PARENT_TABLE = :topics + PARENT_SHARDING_KEY = :organization_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165192_add_sharding_key_trigger_to_project_uploads.rb b/db/migrate/20251118165192_add_sharding_key_trigger_to_project_uploads.rb new file mode 100644 index 00000000000000..f675968be77a6b --- /dev/null +++ b/db/migrate/20251118165192_add_sharding_key_trigger_to_project_uploads.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToProjectUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :project_uploads + SHARDING_KEY = :project_id + PARENT_TABLE = :projects + PARENT_SHARDING_KEY = :id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165194_add_sharding_key_trigger_to_snippet_uploads.rb b/db/migrate/20251118165194_add_sharding_key_trigger_to_snippet_uploads.rb new file mode 100644 index 00000000000000..27894bd0a0aed5 --- /dev/null +++ b/db/migrate/20251118165194_add_sharding_key_trigger_to_snippet_uploads.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToSnippetUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :snippet_uploads + SHARDING_KEY = :organization_id + PARENT_TABLE = :snippets + PARENT_SHARDING_KEY = :organization_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165198_add_sharding_key_trigger_to_userpermission_export_upload_uploads.rb b/db/migrate/20251118165198_add_sharding_key_trigger_to_userpermission_export_upload_uploads.rb new file mode 100644 index 00000000000000..4e94045eaff1cf --- /dev/null +++ b/db/migrate/20251118165198_add_sharding_key_trigger_to_userpermission_export_upload_uploads.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToUserpermissionExportUploadUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :user_permission_export_upload_uploads + SHARDING_KEY = :uploaded_by_user_id + PARENT_TABLE = :user_permission_export_uploads + PARENT_SHARDING_KEY = :user_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165202_add_sharding_key_trigger_to_abuse_report_uploads.rb b/db/migrate/20251118165202_add_sharding_key_trigger_to_abuse_report_uploads.rb new file mode 100644 index 00000000000000..3d3ce4c96d09fe --- /dev/null +++ b/db/migrate/20251118165202_add_sharding_key_trigger_to_abuse_report_uploads.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToAbuseReportUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :abuse_report_uploads + SHARDING_KEY = :organization_id + PARENT_TABLE = :abuse_reports + PARENT_SHARDING_KEY = :organization_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/migrate/20251118165207_add_sharding_key_trigger_to_user_uploads.rb b/db/migrate/20251118165207_add_sharding_key_trigger_to_user_uploads.rb new file mode 100644 index 00000000000000..069177cf59ed5a --- /dev/null +++ b/db/migrate/20251118165207_add_sharding_key_trigger_to_user_uploads.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class AddShardingKeyTriggerToUserUploads < Gitlab::Database::Migration[2.3] + milestone '18.7' + + TABLE_NAME = :user_uploads + SHARDING_KEY = :organization_id + PARENT_TABLE = :users + PARENT_SHARDING_KEY = :organization_id + FOREIGN_KEY = :model_id + + def up + install_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end + + def down + remove_sharding_key_assignment_trigger( + table: TABLE_NAME, + sharding_key: SHARDING_KEY, + parent_table: PARENT_TABLE, + parent_sharding_key: PARENT_SHARDING_KEY, + foreign_key: FOREIGN_KEY + ) + end +end diff --git a/db/schema_migrations/20251118165156 b/db/schema_migrations/20251118165156 new file mode 100644 index 00000000000000..91501de0d8c107 --- /dev/null +++ b/db/schema_migrations/20251118165156 @@ -0,0 +1 @@ +bdd4599f9ce47a35b1b1014a90911ee0a11a0142b7fe05e95ab5bdcf720ed5af \ No newline at end of file diff --git a/db/schema_migrations/20251118165159 b/db/schema_migrations/20251118165159 new file mode 100644 index 00000000000000..5d4d709e241fdf --- /dev/null +++ b/db/schema_migrations/20251118165159 @@ -0,0 +1 @@ +a4ae5b3965a867debae46b2483bf3d07d8796b0139f092240c269d8e3a4d3bc3 \ No newline at end of file diff --git a/db/schema_migrations/20251118165164 b/db/schema_migrations/20251118165164 new file mode 100644 index 00000000000000..e8de99e67bc2af --- /dev/null +++ b/db/schema_migrations/20251118165164 @@ -0,0 +1 @@ +b81d141ccb42db1dd05593ab4dd4e8f4c01582514d0649a2caadb9662cc8e191 \ No newline at end of file diff --git a/db/schema_migrations/20251118165169 b/db/schema_migrations/20251118165169 new file mode 100644 index 00000000000000..b13d4b7890de99 --- /dev/null +++ b/db/schema_migrations/20251118165169 @@ -0,0 +1 @@ +eca61f1d1612590b346aa3a8636384224ebac30942843f249f267d155033eebe \ No newline at end of file diff --git a/db/schema_migrations/20251118165171 b/db/schema_migrations/20251118165171 new file mode 100644 index 00000000000000..7c0a6caa356e26 --- /dev/null +++ b/db/schema_migrations/20251118165171 @@ -0,0 +1 @@ +19a630cc130b8c5d6b6c4fa3eaa4e2e660d3618a35036d93cf90566dcc47b007 \ No newline at end of file diff --git a/db/schema_migrations/20251118165174 b/db/schema_migrations/20251118165174 new file mode 100644 index 00000000000000..034c1366dcae03 --- /dev/null +++ b/db/schema_migrations/20251118165174 @@ -0,0 +1 @@ +8b25e66d1297782ec27ce7b9788b6c867dee4c15a9de2dd2e2f88411da82b1ab \ No newline at end of file diff --git a/db/schema_migrations/20251118165177 b/db/schema_migrations/20251118165177 new file mode 100644 index 00000000000000..c37eef673bffa3 --- /dev/null +++ b/db/schema_migrations/20251118165177 @@ -0,0 +1 @@ +8f97e61c0553a5ea67fe19180be0b96410c0c591b7b065199fdfc5be69984044 \ No newline at end of file diff --git a/db/schema_migrations/20251118165181 b/db/schema_migrations/20251118165181 new file mode 100644 index 00000000000000..da79d31a148eb0 --- /dev/null +++ b/db/schema_migrations/20251118165181 @@ -0,0 +1 @@ +679372e1896b0d05c07db746e033dbde50d1674e6ad3ba35f8a353316751ff53 \ No newline at end of file diff --git a/db/schema_migrations/20251118165183 b/db/schema_migrations/20251118165183 new file mode 100644 index 00000000000000..5122261c328fd3 --- /dev/null +++ b/db/schema_migrations/20251118165183 @@ -0,0 +1 @@ +ebaddb64a007f66be4e173f6d624d85e8c6f2c15a371c75efd6f1b8f1953ce5f \ No newline at end of file diff --git a/db/schema_migrations/20251118165187 b/db/schema_migrations/20251118165187 new file mode 100644 index 00000000000000..6174704d9e73c8 --- /dev/null +++ b/db/schema_migrations/20251118165187 @@ -0,0 +1 @@ +f7d027734a2d732d46fadeeb85fc6160cff75197eca1feb548a2e13039aef4f8 \ No newline at end of file diff --git a/db/schema_migrations/20251118165189 b/db/schema_migrations/20251118165189 new file mode 100644 index 00000000000000..57a912fa0439ef --- /dev/null +++ b/db/schema_migrations/20251118165189 @@ -0,0 +1 @@ +f81e1492763b1a86b6e41e62c636ddeb9d2a0212983848e369c140f23248d244 \ No newline at end of file diff --git a/db/schema_migrations/20251118165192 b/db/schema_migrations/20251118165192 new file mode 100644 index 00000000000000..4f76d6e7a32b93 --- /dev/null +++ b/db/schema_migrations/20251118165192 @@ -0,0 +1 @@ +61512c5c4de741476cd22126a4f17c6888e02ce6c00bb3120d205cac3dfd316c \ No newline at end of file diff --git a/db/schema_migrations/20251118165194 b/db/schema_migrations/20251118165194 new file mode 100644 index 00000000000000..3f4d63279cdffa --- /dev/null +++ b/db/schema_migrations/20251118165194 @@ -0,0 +1 @@ +6b08040d7489918a4011511531825f08769a3ceb4dc2fe13423881d2e9c70d2b \ No newline at end of file diff --git a/db/schema_migrations/20251118165198 b/db/schema_migrations/20251118165198 new file mode 100644 index 00000000000000..af970ea435459e --- /dev/null +++ b/db/schema_migrations/20251118165198 @@ -0,0 +1 @@ +aea18352f3a2ed9150ad207cd55425a9a2685e62baf00b589c7d439735d9cd7a \ No newline at end of file diff --git a/db/schema_migrations/20251118165202 b/db/schema_migrations/20251118165202 new file mode 100644 index 00000000000000..5eecbc26ad2a63 --- /dev/null +++ b/db/schema_migrations/20251118165202 @@ -0,0 +1 @@ +8d237f03ecf982751b4616d9ec5b307e2dfe2199808e218e53dfbc997365c1d0 \ No newline at end of file diff --git a/db/schema_migrations/20251118165207 b/db/schema_migrations/20251118165207 new file mode 100644 index 00000000000000..da4fb5f3ecdfc9 --- /dev/null +++ b/db/schema_migrations/20251118165207 @@ -0,0 +1 @@ +52a16e9470927f411c279e7ba86d99bb2e4664ef24c4c4b29e8f00c37d1678be \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 5e97e6deab537f..72cc74d11372b7 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -1884,6 +1884,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_1825cdc71779() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."organization_id" IS NULL THEN + SELECT "organization_id" + INTO NEW."organization_id" + FROM "organization_details" + WHERE "organization_details"."organization_id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_18bc439a6741() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -1916,6 +1932,38 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_1a052e65e9d9() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."namespace_id" IS NULL THEN + SELECT "group_id" + INTO NEW."namespace_id" + FROM "import_export_uploads" + WHERE "import_export_uploads"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + +CREATE FUNCTION trigger_1a41d368edd5() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."project_id" IS NULL THEN + SELECT "project_id" + INTO NEW."project_id" + FROM "import_export_uploads" + WHERE "import_export_uploads"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_1c0f1ca199a3() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -2126,6 +2174,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_25ba78722e56() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."organization_id" IS NULL THEN + SELECT "organization_id" + INTO NEW."organization_id" + FROM "users" + WHERE "users"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_25c44c30884f() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -2318,6 +2382,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_3434b82e5e12() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."organization_id" IS NULL THEN + SELECT "organization_id" + INTO NEW."organization_id" + FROM "abuse_reports" + WHERE "abuse_reports"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_363d0fd35f2c() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -2382,6 +2462,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_38b6d9d97935() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."project_id" IS NULL THEN + SELECT "id" + INTO NEW."project_id" + FROM "projects" + WHERE "projects"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_38bfee591e40() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -2542,6 +2638,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_442d030cfdfe() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."namespace_id" IS NULL THEN + SELECT "id" + INTO NEW."namespace_id" + FROM "namespaces" + WHERE "namespaces"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_44558add1625() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -2622,6 +2734,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_47c43d40f0d2() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."project_id" IS NULL THEN + SELECT "project_id" + INTO NEW."project_id" + FROM "alert_management_alert_metric_images" + WHERE "alert_management_alert_metric_images"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_49862b4b3035() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -2750,6 +2878,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_4f1b6c76fdfc() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."organization_id" IS NULL THEN + SELECT "organization_id" + INTO NEW."organization_id" + FROM "topics" + WHERE "topics"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_4fc14aa830b1() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -2942,6 +3086,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_67d0d39e2f41() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."uploaded_by_user_id" IS NULL THEN + SELECT "user_id" + INTO NEW."uploaded_by_user_id" + FROM "user_permission_export_uploads" + WHERE "user_permission_export_uploads"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_68435a54ee2b() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -3915,6 +4075,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_a68471fea292() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."organization_id" IS NULL THEN + SELECT "organization_id" + INTO NEW."organization_id" + FROM "snippets" + WHERE "snippets"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_a7e0fb195210() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -4091,6 +4267,38 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_c24a252f7b04() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."namespace_id" IS NULL THEN + SELECT "namespace_id" + INTO NEW."namespace_id" + FROM "design_management_designs_versions" + WHERE "design_management_designs_versions"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + +CREATE FUNCTION trigger_c40a5bb7c1c3() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."project_id" IS NULL THEN + SELECT "project_id" + INTO NEW."project_id" + FROM "bulk_import_export_uploads" + WHERE "bulk_import_export_uploads"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_c48e4298f362() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -4233,6 +4441,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_cca6a43d90dd() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."namespace_id" IS NULL THEN + SELECT "namespace_id" + INTO NEW."namespace_id" + FROM "achievements" + WHERE "achievements"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_cd50823537a3() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -4297,6 +4521,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_d32ff9d5c63d() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."namespace_id" IS NULL THEN + SELECT "group_id" + INTO NEW."namespace_id" + FROM "bulk_import_export_uploads" + WHERE "bulk_import_export_uploads"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_d4487a75bd44() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -4537,6 +4777,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_e740510cfd33() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."namespace_id" IS NULL THEN + SELECT "namespace_id" + INTO NEW."namespace_id" + FROM "issuable_metric_images" + WHERE "issuable_metric_images"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_e815625b59fa() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -4633,6 +4889,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_f468204dcd5d() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."project_id" IS NULL THEN + SELECT "project_id" + INTO NEW."project_id" + FROM "project_relation_export_uploads" + WHERE "project_relation_export_uploads"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_f6c61cdddf31() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -4729,6 +5001,22 @@ RETURN NEW; END $$; +CREATE FUNCTION trigger_fcc3ea1f9d4e() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN +IF NEW."project_id" IS NULL THEN + SELECT "project_id" + INTO NEW."project_id" + FROM "ai_vectorizable_files" + WHERE "ai_vectorizable_files"."id" = NEW."model_id"; +END IF; + +RETURN NEW; + +END +$$; + CREATE FUNCTION trigger_fd4a1be98713() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -48713,10 +49001,16 @@ CREATE TRIGGER trigger_158ac875f254 BEFORE INSERT OR UPDATE ON approval_group_ru CREATE TRIGGER trigger_174b23fa3dfb BEFORE INSERT OR UPDATE ON approval_project_rules_users FOR EACH ROW EXECUTE FUNCTION trigger_174b23fa3dfb(); +CREATE TRIGGER trigger_1825cdc71779 BEFORE INSERT OR UPDATE ON organization_detail_uploads FOR EACH ROW EXECUTE FUNCTION trigger_1825cdc71779(); + CREATE TRIGGER trigger_18bc439a6741 BEFORE INSERT OR UPDATE ON packages_conan_metadata FOR EACH ROW EXECUTE FUNCTION trigger_18bc439a6741(); CREATE TRIGGER trigger_1996c9e5bea0 BEFORE INSERT OR UPDATE ON abuse_report_events FOR EACH ROW EXECUTE FUNCTION trigger_1996c9e5bea0(); +CREATE TRIGGER trigger_1a052e65e9d9 BEFORE INSERT OR UPDATE ON import_export_upload_uploads FOR EACH ROW EXECUTE FUNCTION trigger_1a052e65e9d9(); + +CREATE TRIGGER trigger_1a41d368edd5 BEFORE INSERT OR UPDATE ON import_export_upload_uploads FOR EACH ROW EXECUTE FUNCTION trigger_1a41d368edd5(); + CREATE TRIGGER trigger_1c0f1ca199a3 BEFORE INSERT OR UPDATE ON ci_resources FOR EACH ROW EXECUTE FUNCTION trigger_1c0f1ca199a3(); CREATE TRIGGER trigger_1ed40f4d5f4e BEFORE INSERT OR UPDATE ON packages_maven_metadata FOR EACH ROW EXECUTE FUNCTION trigger_1ed40f4d5f4e(); @@ -48743,6 +49037,8 @@ CREATE TRIGGER trigger_248cafd363ff BEFORE INSERT OR UPDATE ON packages_npm_meta CREATE TRIGGER trigger_2514245c7fc5 BEFORE INSERT OR UPDATE ON dast_site_profile_secret_variables FOR EACH ROW EXECUTE FUNCTION trigger_2514245c7fc5(); +CREATE TRIGGER trigger_25ba78722e56 BEFORE INSERT OR UPDATE ON user_uploads FOR EACH ROW EXECUTE FUNCTION trigger_25ba78722e56(); + CREATE TRIGGER trigger_25c44c30884f BEFORE INSERT OR UPDATE ON work_item_parent_links FOR EACH ROW EXECUTE FUNCTION trigger_25c44c30884f(); CREATE TRIGGER trigger_25d35f02ab55 BEFORE INSERT OR UPDATE ON ml_candidate_metadata FOR EACH ROW EXECUTE FUNCTION trigger_25d35f02ab55(); @@ -48767,12 +49063,16 @@ CREATE TRIGGER trigger_30209d0fba3e BEFORE INSERT OR UPDATE ON alert_management_ CREATE TRIGGER trigger_309294c3b889 BEFORE INSERT OR UPDATE ON snippet_statistics FOR EACH ROW EXECUTE FUNCTION trigger_309294c3b889(); +CREATE TRIGGER trigger_3434b82e5e12 BEFORE INSERT OR UPDATE ON abuse_report_uploads FOR EACH ROW EXECUTE FUNCTION trigger_3434b82e5e12(); + CREATE TRIGGER trigger_363d0fd35f2c BEFORE INSERT OR UPDATE ON packages_nuget_dependency_link_metadata FOR EACH ROW EXECUTE FUNCTION trigger_363d0fd35f2c(); CREATE TRIGGER trigger_36cb404f9a02 BEFORE INSERT OR UPDATE ON bulk_import_failures FOR EACH ROW EXECUTE FUNCTION trigger_36cb404f9a02(); CREATE TRIGGER trigger_388de55cd36c BEFORE INSERT OR UPDATE ON ci_builds_runner_session FOR EACH ROW EXECUTE FUNCTION trigger_388de55cd36c(); +CREATE TRIGGER trigger_38b6d9d97935 BEFORE INSERT OR UPDATE ON project_uploads FOR EACH ROW EXECUTE FUNCTION trigger_38b6d9d97935(); + CREATE TRIGGER trigger_38bfee591e40 BEFORE INSERT OR UPDATE ON dependency_proxy_blob_states FOR EACH ROW EXECUTE FUNCTION trigger_38bfee591e40(); CREATE TRIGGER trigger_397d1b13068e BEFORE INSERT OR UPDATE ON issue_customer_relations_contacts FOR EACH ROW EXECUTE FUNCTION trigger_397d1b13068e(); @@ -48793,6 +49093,8 @@ CREATE TRIGGER trigger_41eaf23bf547 BEFORE INSERT OR UPDATE ON release_links FOR CREATE TRIGGER trigger_43484cb41aca BEFORE INSERT OR UPDATE ON wiki_repository_states FOR EACH ROW EXECUTE FUNCTION trigger_43484cb41aca(); +CREATE TRIGGER trigger_442d030cfdfe BEFORE INSERT OR UPDATE ON namespace_uploads FOR EACH ROW EXECUTE FUNCTION trigger_442d030cfdfe(); + CREATE TRIGGER trigger_44558add1625 BEFORE INSERT OR UPDATE ON merge_request_assignees FOR EACH ROW EXECUTE FUNCTION trigger_44558add1625(); CREATE TRIGGER trigger_44ff19ad0ab2 BEFORE INSERT OR UPDATE ON packages_pypi_metadata FOR EACH ROW EXECUTE FUNCTION trigger_44ff19ad0ab2(); @@ -48803,6 +49105,8 @@ CREATE TRIGGER trigger_46ebe375f632 BEFORE INSERT OR UPDATE ON epic_issues FOR E CREATE TRIGGER trigger_47b402bdab5f BEFORE INSERT OR UPDATE ON bulk_import_export_batches FOR EACH ROW EXECUTE FUNCTION trigger_47b402bdab5f(); +CREATE TRIGGER trigger_47c43d40f0d2 BEFORE INSERT OR UPDATE ON alert_management_alert_metric_image_uploads FOR EACH ROW EXECUTE FUNCTION trigger_47c43d40f0d2(); + CREATE TRIGGER trigger_49862b4b3035 BEFORE INSERT OR UPDATE ON approval_group_rules_protected_branches FOR EACH ROW EXECUTE FUNCTION trigger_49862b4b3035(); CREATE TRIGGER trigger_49b563d0130b BEFORE INSERT OR UPDATE ON dast_scanner_profiles_builds FOR EACH ROW EXECUTE FUNCTION trigger_49b563d0130b(); @@ -48819,6 +49123,8 @@ CREATE TRIGGER trigger_4cc5c3ac4d7f BEFORE INSERT OR UPDATE ON bulk_import_expor CREATE TRIGGER trigger_4dc8ec48e038 BEFORE INSERT OR UPDATE ON requirements_management_test_reports FOR EACH ROW EXECUTE FUNCTION trigger_4dc8ec48e038(); +CREATE TRIGGER trigger_4f1b6c76fdfc BEFORE INSERT OR UPDATE ON project_topic_uploads FOR EACH ROW EXECUTE FUNCTION trigger_4f1b6c76fdfc(); + CREATE TRIGGER trigger_4fc14aa830b1 BEFORE INSERT OR UPDATE ON work_item_current_statuses FOR EACH ROW EXECUTE FUNCTION trigger_4fc14aa830b1(); CREATE TRIGGER trigger_54707c384ad7 BEFORE INSERT OR UPDATE ON security_orchestration_policy_rule_schedules FOR EACH ROW EXECUTE FUNCTION trigger_54707c384ad7(); @@ -48843,6 +49149,8 @@ CREATE TRIGGER trigger_627949f72f05 BEFORE INSERT OR UPDATE ON packages_rpm_meta CREATE TRIGGER trigger_664594a3d0a7 BEFORE INSERT OR UPDATE ON merge_request_user_mentions FOR EACH ROW EXECUTE FUNCTION trigger_664594a3d0a7(); +CREATE TRIGGER trigger_67d0d39e2f41 BEFORE INSERT OR UPDATE ON user_permission_export_upload_uploads FOR EACH ROW EXECUTE FUNCTION trigger_67d0d39e2f41(); + CREATE TRIGGER trigger_68435a54ee2b BEFORE INSERT OR UPDATE ON packages_debian_project_architectures FOR EACH ROW EXECUTE FUNCTION trigger_68435a54ee2b(); CREATE TRIGGER trigger_6bf50b363152 BEFORE INSERT OR UPDATE ON compliance_framework_security_policies FOR EACH ROW EXECUTE FUNCTION trigger_6bf50b363152(); @@ -48965,6 +49273,8 @@ CREATE TRIGGER trigger_a465de38164e BEFORE INSERT OR UPDATE ON ci_job_artifact_s CREATE TRIGGER trigger_a4e4fb2451d9 BEFORE INSERT OR UPDATE ON epic_user_mentions FOR EACH ROW EXECUTE FUNCTION trigger_a4e4fb2451d9(); +CREATE TRIGGER trigger_a68471fea292 BEFORE INSERT OR UPDATE ON snippet_uploads FOR EACH ROW EXECUTE FUNCTION trigger_a68471fea292(); + CREATE TRIGGER trigger_a7e0fb195210 BEFORE INSERT OR UPDATE ON vulnerability_finding_evidences FOR EACH ROW EXECUTE FUNCTION trigger_a7e0fb195210(); CREATE TRIGGER trigger_af3f17817e4d BEFORE INSERT OR UPDATE ON protected_tag_create_access_levels FOR EACH ROW EXECUTE FUNCTION trigger_af3f17817e4d(); @@ -48989,6 +49299,10 @@ CREATE TRIGGER trigger_bulk_import_trackers_sharding_key BEFORE INSERT OR UPDATE CREATE TRIGGER trigger_c17a166692a2 BEFORE INSERT OR UPDATE ON audit_events_streaming_headers FOR EACH ROW EXECUTE FUNCTION trigger_c17a166692a2(); +CREATE TRIGGER trigger_c24a252f7b04 BEFORE INSERT OR UPDATE ON design_management_action_uploads FOR EACH ROW EXECUTE FUNCTION trigger_c24a252f7b04(); + +CREATE TRIGGER trigger_c40a5bb7c1c3 BEFORE INSERT OR UPDATE ON bulk_import_export_upload_uploads FOR EACH ROW EXECUTE FUNCTION trigger_c40a5bb7c1c3(); + CREATE TRIGGER trigger_c48e4298f362 BEFORE INSERT OR UPDATE ON user_details FOR EACH ROW EXECUTE FUNCTION trigger_c48e4298f362(); CREATE TRIGGER trigger_c52d215d50a1 BEFORE INSERT OR UPDATE ON incident_management_pending_issue_escalations FOR EACH ROW EXECUTE FUNCTION trigger_c52d215d50a1(); @@ -49009,6 +49323,8 @@ CREATE TRIGGER trigger_cac7c0698291 BEFORE INSERT OR UPDATE ON evidences FOR EAC CREATE TRIGGER trigger_catalog_resource_sync_event_on_project_update AFTER UPDATE ON projects FOR EACH ROW WHEN ((((old.name)::text IS DISTINCT FROM (new.name)::text) OR (old.description IS DISTINCT FROM new.description) OR (old.visibility_level IS DISTINCT FROM new.visibility_level))) EXECUTE FUNCTION insert_catalog_resource_sync_event(); +CREATE TRIGGER trigger_cca6a43d90dd BEFORE INSERT OR UPDATE ON achievement_uploads FOR EACH ROW EXECUTE FUNCTION trigger_cca6a43d90dd(); + CREATE TRIGGER trigger_cd50823537a3 BEFORE INSERT OR UPDATE ON issuable_slas FOR EACH ROW EXECUTE FUNCTION trigger_cd50823537a3(); CREATE TRIGGER trigger_cdfa6500a121 BEFORE INSERT OR UPDATE ON snippet_statistics FOR EACH ROW EXECUTE FUNCTION trigger_cdfa6500a121(); @@ -49019,6 +49335,8 @@ CREATE TRIGGER trigger_cfbec3f07e2b BEFORE INSERT OR UPDATE ON deployment_merge_ CREATE TRIGGER trigger_cleanup_pipeline_iid_after_delete AFTER DELETE ON p_ci_pipelines FOR EACH ROW EXECUTE FUNCTION cleanup_pipeline_iid_after_delete(); +CREATE TRIGGER trigger_d32ff9d5c63d BEFORE INSERT OR UPDATE ON bulk_import_export_upload_uploads FOR EACH ROW EXECUTE FUNCTION trigger_d32ff9d5c63d(); + CREATE TRIGGER trigger_d4487a75bd44 BEFORE INSERT OR UPDATE ON terraform_state_versions FOR EACH ROW EXECUTE FUNCTION trigger_d4487a75bd44(); CREATE TRIGGER trigger_d5c895007948 BEFORE INSERT OR UPDATE ON protected_environment_approval_rules FOR EACH ROW EXECUTE FUNCTION trigger_d5c895007948(); @@ -49053,6 +49371,8 @@ CREATE TRIGGER trigger_e49ab4d904a0 BEFORE INSERT OR UPDATE ON vulnerability_fin CREATE TRIGGER trigger_e4a6cde57b42 BEFORE INSERT OR UPDATE ON resource_weight_events FOR EACH ROW EXECUTE FUNCTION trigger_e4a6cde57b42(); +CREATE TRIGGER trigger_e740510cfd33 BEFORE INSERT OR UPDATE ON issuable_metric_image_uploads FOR EACH ROW EXECUTE FUNCTION trigger_e740510cfd33(); + CREATE TRIGGER trigger_e815625b59fa BEFORE INSERT OR UPDATE ON resource_link_events FOR EACH ROW EXECUTE FUNCTION trigger_e815625b59fa(); CREATE TRIGGER trigger_ebab34f83f1d BEFORE INSERT OR UPDATE ON packages_debian_publications FOR EACH ROW EXECUTE FUNCTION trigger_ebab34f83f1d(); @@ -49071,6 +49391,8 @@ CREATE TRIGGER trigger_ensure_pipeline_iid_uniqueness_before_insert BEFORE INSER CREATE TRIGGER trigger_ensure_pipeline_iid_uniqueness_before_update_iid BEFORE UPDATE OF iid ON p_ci_pipelines FOR EACH ROW EXECUTE FUNCTION ensure_pipeline_iid_uniqueness_before_update_iid(); +CREATE TRIGGER trigger_f468204dcd5d BEFORE INSERT OR UPDATE ON project_import_export_relation_export_upload_uploads FOR EACH ROW EXECUTE FUNCTION trigger_f468204dcd5d(); + CREATE TRIGGER trigger_f6c61cdddf31 BEFORE INSERT OR UPDATE ON ml_model_metadata FOR EACH ROW EXECUTE FUNCTION trigger_f6c61cdddf31(); CREATE TRIGGER trigger_f6f59d8216b3 BEFORE INSERT OR UPDATE ON protected_environment_deploy_access_levels FOR EACH ROW EXECUTE FUNCTION trigger_f6f59d8216b3(); @@ -49083,6 +49405,8 @@ CREATE TRIGGER trigger_fbd42ed69453 BEFORE INSERT OR UPDATE ON external_status_c CREATE TRIGGER trigger_fbd8825b3057 BEFORE INSERT OR UPDATE ON boards_epic_board_labels FOR EACH ROW EXECUTE FUNCTION trigger_fbd8825b3057(); +CREATE TRIGGER trigger_fcc3ea1f9d4e BEFORE INSERT OR UPDATE ON ai_vectorizable_file_uploads FOR EACH ROW EXECUTE FUNCTION trigger_fcc3ea1f9d4e(); + CREATE TRIGGER trigger_fd4a1be98713 BEFORE INSERT OR UPDATE ON container_repository_states FOR EACH ROW EXECUTE FUNCTION trigger_fd4a1be98713(); CREATE TRIGGER trigger_fff8735b6b9a BEFORE INSERT OR UPDATE ON vulnerability_finding_signatures FOR EACH ROW EXECUTE FUNCTION trigger_fff8735b6b9a(); diff --git a/ee/app/models/dependencies/dependency_list_export.rb b/ee/app/models/dependencies/dependency_list_export.rb index eac3ad20f5712b..2d68f6992a4b5e 100644 --- a/ee/app/models/dependencies/dependency_list_export.rb +++ b/ee/app/models/dependencies/dependency_list_export.rb @@ -9,6 +9,7 @@ class DependencyListExport < ::SecApplicationRecord mount_file_store_uploader AttachmentUploader + belongs_to :organization, class_name: 'Organizations::Organization' belongs_to :project belongs_to :group belongs_to :pipeline, class_name: 'Ci::Pipeline' @@ -103,6 +104,7 @@ def timed_out? def uploads_sharding_key { + organization_id: organization_id, namespace_id: group_id, project_id: project_id } diff --git a/ee/app/models/user_permission_export_upload.rb b/ee/app/models/user_permission_export_upload.rb index b82a8194e1bbd2..b7c797674de5ef 100644 --- a/ee/app/models/user_permission_export_upload.rb +++ b/ee/app/models/user_permission_export_upload.rb @@ -31,7 +31,7 @@ class UserPermissionExportUpload < ApplicationRecord end def uploads_sharding_key - {} + { uploaded_by_user_id: user_id } end private diff --git a/ee/spec/models/dependencies/dependency_list_export_spec.rb b/ee/spec/models/dependencies/dependency_list_export_spec.rb index da72f9bcb31468..57e7e9177e9614 100644 --- a/ee/spec/models/dependencies/dependency_list_export_spec.rb +++ b/ee/spec/models/dependencies/dependency_list_export_spec.rb @@ -296,20 +296,21 @@ end describe '#uploads_sharding_key' do - it 'returns one of group_id, or porject_id' do - parents = { group: nil, project: nil } + it 'returns one of organization_id, group_id, or project_id' do + parents = { organization: nil, group: nil, project: nil } parents.each_key do |parent_type| parent = build_stubbed(parent_type) export = build_stubbed(:dependency_list_export, **parents.merge(parent_type => parent)) key_name = case parent_type + when :organization then :organization_id when :group then :namespace_id when :project then :project_id end expect(export.uploads_sharding_key).to eq( - { namespace_id: nil, project_id: nil }.merge(key_name => parent.id) + { organization_id: nil, namespace_id: nil, project_id: nil }.merge(key_name => parent.id) ) end end diff --git a/ee/spec/models/user_permission_export_upload_spec.rb b/ee/spec/models/user_permission_export_upload_spec.rb index ad341afb385218..6820798dae1421 100644 --- a/ee/spec/models/user_permission_export_upload_spec.rb +++ b/ee/spec/models/user_permission_export_upload_spec.rb @@ -48,8 +48,10 @@ end describe '#uploads_sharding_key' do - it 'returns empty hash' do - expect(upload.uploads_sharding_key).to eq({}) + it 'returns user_id' do + user = create(:user) + upload.user = user + expect(upload.uploads_sharding_key).to eq({ uploaded_by_user_id: user.id }) end end end diff --git a/spec/lib/gitlab/database/sharding_key_spec.rb b/spec/lib/gitlab/database/sharding_key_spec.rb index 339c63cb82f333..900911b01798e0 100644 --- a/spec/lib/gitlab/database/sharding_key_spec.rb +++ b/spec/lib/gitlab/database/sharding_key_spec.rb @@ -9,13 +9,11 @@ # the table name to remove this once a decision has been made. let(:allowed_to_be_missing_sharding_key) do [ - 'abuse_report_uploads', # https://gitlab.com/gitlab-org/gitlab/-/issues/398199 '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 - 'user_permission_export_upload_uploads' # https://gitlab.com/gitlab-org/gitlab/-/issues/398199 + 'authentication_event_archived_records' # temp table: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/202447 ] end @@ -60,6 +58,7 @@ # TODO: Remove these exceptions once the issue is closed. let(:uploads_and_partitions) do %w[ + abuse_report_uploads.organization_id achievement_uploads.namespace_id ai_vectorizable_file_uploads.project_id alert_management_alert_metric_image_uploads.project_id @@ -76,6 +75,8 @@ project_topic_uploads.organization_id project_uploads.project_id snippet_uploads.organization_id + user_permission_export_upload_uploads.uploaded_by_user_id + user_uploads.organization_id vulnerability_export_part_uploads.organization_id vulnerability_export_uploads.organization_id vulnerability_archive_export_uploads.project_id diff --git a/spec/models/abuse_report_spec.rb b/spec/models/abuse_report_spec.rb index a847011455536c..8db1ecc3ffd53a 100644 --- a/spec/models/abuse_report_spec.rb +++ b/spec/models/abuse_report_spec.rb @@ -429,8 +429,8 @@ end describe '#uploads_sharding_key' do - it 'returns empty hash' do - expect(report.uploads_sharding_key).to eq({}) + it 'returns organization_id' do + expect(report.uploads_sharding_key).to eq({ organization_id: report.organization_id }) end end end diff --git a/spec/models/upload_spec.rb b/spec/models/upload_spec.rb index 75768b0112c4d7..8bf42b53cd189a 100644 --- a/spec/models/upload_spec.rb +++ b/spec/models/upload_spec.rb @@ -22,7 +22,7 @@ upload = described_class.create!( path: __FILE__, size: described_class::CHECKSUM_THRESHOLD + 1.kilobyte, - model: build_stubbed(:user), + model: create(:user), uploader: double('ExampleUploader'), store: ObjectStorage::Store::LOCAL ) @@ -37,7 +37,7 @@ upload = described_class.new( path: __FILE__, size: described_class::CHECKSUM_THRESHOLD, - model: build_stubbed(:user), + model: create(:user), uploader: double('ExampleUploader'), store: ObjectStorage::Store::LOCAL ) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index e34cc550407f95..bb2b6edb58d4c8 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -9943,7 +9943,7 @@ def owner_class_attribute_default; end subject(:uploads_sharding_key) { user.uploads_sharding_key } - it { is_expected.to eq({}) } + it { is_expected.to eq({ organization_id: user.organization_id }) } end describe 'support pin methods', :freeze_time do diff --git a/spec/uploaders/avatar_uploader_spec.rb b/spec/uploaders/avatar_uploader_spec.rb index 79786d17de4119..9eff803b2bc67c 100644 --- a/spec/uploaders/avatar_uploader_spec.rb +++ b/spec/uploaders/avatar_uploader_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe AvatarUploader do - let(:model) { build_stubbed(:user) } + let(:model) { create(:user) } let(:uploader) { described_class.new(model, :avatar) } let(:upload) { create(:upload, model: model) } diff --git a/spec/uploaders/object_storage_spec.rb b/spec/uploaders/object_storage_spec.rb index a12df6fc536355..f8f8e29ed6ff77 100644 --- a/spec/uploaders/object_storage_spec.rb +++ b/spec/uploaders/object_storage_spec.rb @@ -21,7 +21,7 @@ def dynamic_segment # TODO: Update feature_category once object storage group ownership has been determined. RSpec.describe ObjectStorage, :clean_gitlab_redis_shared_state, feature_category: :shared do let(:uploader_class) { Implementation } - let(:object) { build_stubbed(:user) } + let(:object) { create(:user) } let(:file_column) { :file } let(:uploader) { uploader_class.new(object, file_column) } diff --git a/spec/uploaders/records_uploads_spec.rb b/spec/uploaders/records_uploads_spec.rb index c1f5f962d771a7..a4587e3fea8b46 100644 --- a/spec/uploaders/records_uploads_spec.rb +++ b/spec/uploaders/records_uploads_spec.rb @@ -16,7 +16,7 @@ def dynamic_segment end end - RecordsUploadsExampleUploader.new(build_stubbed(:user)) + RecordsUploadsExampleUploader.new(create(:user)) end def upload_fixture(filename) @@ -79,7 +79,7 @@ def upload_fixture(filename) existing = Upload.create!( path: File.join('uploads', 'rails_sample.jpg'), size: 512.kilobytes, - model: build_stubbed(:user), + model: create(:user), uploader: uploader.class.to_s ) -- GitLab