Skip to content

Draft: Prepare achievement_uploads to be fully sharded

What does this MR do and why?

Addresses #398199

  • Create trigger for achievement_uploads: set namespace_id from parent achievement when missing
  • Add NOT NULL (NOT VALID) constraint on achievement_uploads sharding key: applies to new or updated rows only
  • Remove orphan uploads pertaining to deleted achievements and backfill achievement_uploads with sharding key

** Background: achievement_uploads is a partition of uploads

SQL

DELETE FROM "uploads" WHERE ("uploads"."id") IN (SELECT "uploads"."id" FROM "uploads" LEFT JOIN achievements ON achievements.id = uploads.model_id WHERE "uploads"."id" BETWEEN 91 AND 95 AND "uploads"."id" >= 91 AND "uploads"."id" < 92 AND "uploads"."model_type" = 'Achievements::Achievement' AND "achievements"."id" IS NULL)

Query plan: https://postgres.ai/console/gitlab/gitlab-production-main/sessions/44190/commands/135396

UPDATE "uploads" SET created_at = created_at WHERE "uploads"."id" BETWEEN 91 AND 95 AND "uploads"."id" >= 91 AND "uploads"."id" < 92 AND "uploads"."model_type" = 'Achievements::Achievement' AND "uploads"."namespace_id" IS NULL

Query plan: https://postgres.ai/console/gitlab/gitlab-production-main/sessions/44190/commands/135397

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Tomasz Skorupa

Merge request reports

Loading