Ensure presence of resource_milestone_events.namespace_id and backfill existing records

What does this MR do and why?

Adds a sharding key and makes sure the AR model sets it in a before_validation callback. Schedules backfill for existing records

DB review

Query plans

Update batch for issue related milestone events

https://console.postgres.ai/gitlab/gitlab-production-main/sessions/36685/commands/112661

UPDATE 
  "resource_milestone_events" 
SET 
  "namespace_id" = "issues"."namespace_id" 
FROM 
  "issues" 
WHERE 
  "resource_milestone_events"."issue_id" = "issues"."id" 
  AND "resource_milestone_events"."id" IN (
    SELECT 
      "resource_milestone_events"."id" 
    FROM 
      "resource_milestone_events" 
    WHERE 
      "resource_milestone_events"."id" BETWEEN 1 
      AND 109 
      AND "resource_milestone_events"."id" >= 1 
      AND "resource_milestone_events"."id" < 109
  )
Update batch for merge request related milestone events

https://console.postgres.ai/gitlab/gitlab-production-main/sessions/36685/commands/112662

UPDATE 
  "resource_milestone_events" 
SET 
  "namespace_id" = "projects"."project_namespace_id" 
FROM 
  "merge_requests" 
  INNER JOIN "projects" ON "merge_requests"."target_project_id" = "projects"."id" 
WHERE 
  "resource_milestone_events"."merge_request_id" = "merge_requests"."id" 
  AND "resource_milestone_events"."id" IN (
    SELECT 
      "resource_milestone_events"."id" 
    FROM 
      "resource_milestone_events" 
    WHERE 
      "resource_milestone_events"."id" BETWEEN 1 
      AND 109 
      AND "resource_milestone_events"."id" >= 1 
      AND "resource_milestone_events"."id" < 109
  )

Migration output

UP
main: == [advisory_lock_connection] object_id: 131740, pg_backend_pid: 2985
main: == 20250224204225 AddRsourceMilestoneEventsShardingKey: migrating =============
main: -- add_column(:resource_milestone_events, :namespace_id, :bigint, {:null=>false, :default=>0})
main:    -> 0.0033s
main: == 20250224204225 AddRsourceMilestoneEventsShardingKey: migrated (0.0068s) ====

main: == [advisory_lock_connection] object_id: 131740, pg_backend_pid: 2985
ci: == [advisory_lock_connection] object_id: 132060, pg_backend_pid: 2987
ci: == 20250224204225 AddRsourceMilestoneEventsShardingKey: migrating =============
ci: -- add_column(:resource_milestone_events, :namespace_id, :bigint, {:null=>false, :default=>0})
ci:    -> 0.0029s
ci: == 20250224204225 AddRsourceMilestoneEventsShardingKey: migrated (0.0101s) ====

ci: == [advisory_lock_connection] object_id: 132060, pg_backend_pid: 2987
main: == [advisory_lock_connection] object_id: 132300, pg_backend_pid: 2990
main: == 20250225234245 IndexResourceMilestoneEventsIssueMergeRequestMissing: migrating
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0070s
main: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :where=>"issue_id IS NULL AND merge_request_id IS NULL", :algorithm=>:concurrently})
main:    -> 0.0025s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- add_index(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :where=>"issue_id IS NULL AND merge_request_id IS NULL", :algorithm=>:concurrently})
main:    -> 0.0013s
main: -- execute("RESET statement_timeout")
main:    -> 0.0003s
main: == 20250225234245 IndexResourceMilestoneEventsIssueMergeRequestMissing: migrated (0.0220s)

main: == [advisory_lock_connection] object_id: 132300, pg_backend_pid: 2990
ci: == [advisory_lock_connection] object_id: 132460, pg_backend_pid: 2992
ci: == 20250225234245 IndexResourceMilestoneEventsIssueMergeRequestMissing: migrating
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0004s
ci: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :where=>"issue_id IS NULL AND merge_request_id IS NULL", :algorithm=>:concurrently})
ci:    -> 0.0024s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0003s
ci: -- add_index(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :where=>"issue_id IS NULL AND merge_request_id IS NULL", :algorithm=>:concurrently})
ci:    -> 0.0011s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0003s
ci: == 20250225234245 IndexResourceMilestoneEventsIssueMergeRequestMissing: migrated (0.0194s)

ci: == [advisory_lock_connection] object_id: 132460, pg_backend_pid: 2992
main: == [advisory_lock_connection] object_id: 132660, pg_backend_pid: 2995
main: == 20250225234322 CleanResourceMilestoneEventsWithoutParent: migrating ========
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: == 20250225234322 CleanResourceMilestoneEventsWithoutParent: migrated (0.0107s)

main: == [advisory_lock_connection] object_id: 132660, pg_backend_pid: 2995
ci: == [advisory_lock_connection] object_id: 132800, pg_backend_pid: 2997
ci: == 20250225234322 CleanResourceMilestoneEventsWithoutParent: migrating ========
ci: -- The migration is skipped since it modifies the schemas: [:gitlab_main].
ci: -- This database can only apply migrations in one of the following schemas: [:gitlab_ci, :gitlab_internal, :gitlab_shared].
ci: == 20250225234322 CleanResourceMilestoneEventsWithoutParent: migrated (0.0067s)

ci: == [advisory_lock_connection] object_id: 132800, pg_backend_pid: 2997
main: == [advisory_lock_connection] object_id: 133000, pg_backend_pid: 3001
main: == 20250225235323 IndexResourceMilestoneEventsIssueMergeRequestBothPresent: migrating
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0004s
main: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :where=>"issue_id IS NOT NULL AND merge_request_id IS NOT NULL", :algorithm=>:concurrently})
main:    -> 0.0026s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- add_index(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :where=>"issue_id IS NOT NULL AND merge_request_id IS NOT NULL", :algorithm=>:concurrently})
main:    -> 0.0014s
main: -- execute("RESET statement_timeout")
main:    -> 0.0003s
main: == 20250225235323 IndexResourceMilestoneEventsIssueMergeRequestBothPresent: migrated (0.0121s)

main: == [advisory_lock_connection] object_id: 133000, pg_backend_pid: 3001
ci: == [advisory_lock_connection] object_id: 133120, pg_backend_pid: 3003
ci: == 20250225235323 IndexResourceMilestoneEventsIssueMergeRequestBothPresent: migrating
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0004s
ci: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :where=>"issue_id IS NOT NULL AND merge_request_id IS NOT NULL", :algorithm=>:concurrently})
ci:    -> 0.0027s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0003s
ci: -- add_index(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :where=>"issue_id IS NOT NULL AND merge_request_id IS NOT NULL", :algorithm=>:concurrently})
ci:    -> 0.0012s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0003s
ci: == 20250225235323 IndexResourceMilestoneEventsIssueMergeRequestBothPresent: migrated (0.0160s)

ci: == [advisory_lock_connection] object_id: 133120, pg_backend_pid: 3003
main: == [advisory_lock_connection] object_id: 133320, pg_backend_pid: 3006
main: == 20250225235324 CleanResourceMilestoneEventsWithTwoParents: migrating =======
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: == 20250225235324 CleanResourceMilestoneEventsWithTwoParents: migrated (0.0086s)

main: == [advisory_lock_connection] object_id: 133320, pg_backend_pid: 3006
ci: == [advisory_lock_connection] object_id: 133460, pg_backend_pid: 3008
ci: == 20250225235324 CleanResourceMilestoneEventsWithTwoParents: migrating =======
ci: -- The migration is skipped since it modifies the schemas: [:gitlab_main].
ci: -- This database can only apply migrations in one of the following schemas: [:gitlab_ci, :gitlab_internal, :gitlab_shared].
ci: == 20250225235324 CleanResourceMilestoneEventsWithTwoParents: migrated (0.0063s)

ci: == [advisory_lock_connection] object_id: 133460, pg_backend_pid: 3008
main: == [advisory_lock_connection] object_id: 133660, pg_backend_pid: 3011
main: == 20250225235325 AddResourceMilestoneEventsUniqueParentConstraint: migrating =
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- execute("ALTER TABLE resource_milestone_events\nADD CONSTRAINT check_fa0260b82e\nCHECK ( num_nonnulls(issue_id, merge_request_id) = 1 )\nNOT VALID;\n")
main:    -> 0.0020s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- execute("ALTER TABLE resource_milestone_events VALIDATE CONSTRAINT check_fa0260b82e;")
main:    -> 0.0008s
main: -- execute("RESET statement_timeout")
main:    -> 0.0003s
main: == 20250225235325 AddResourceMilestoneEventsUniqueParentConstraint: migrated (0.0142s)

main: == [advisory_lock_connection] object_id: 133660, pg_backend_pid: 3011
ci: == [advisory_lock_connection] object_id: 133820, pg_backend_pid: 3017
ci: == 20250225235325 AddResourceMilestoneEventsUniqueParentConstraint: migrating =
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- execute("ALTER TABLE resource_milestone_events\nADD CONSTRAINT check_fa0260b82e\nCHECK ( num_nonnulls(issue_id, merge_request_id) = 1 )\nNOT VALID;\n")
ci:    -> 0.0017s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0003s
ci: -- execute("ALTER TABLE resource_milestone_events VALIDATE CONSTRAINT check_fa0260b82e;")
ci:    -> 0.0006s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0003s
ci: == 20250225235325 AddResourceMilestoneEventsUniqueParentConstraint: migrated (0.0151s)

ci: == [advisory_lock_connection] object_id: 133820, pg_backend_pid: 3017
main: == [advisory_lock_connection] object_id: 134060, pg_backend_pid: 3020
main: == 20250225235326 DropTempIndexResourceMilestoneEventsParentBothPresent: migrating
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0004s
main: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :algorithm=>:concurrently})
main:    -> 0.0028s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- remove_index(:resource_milestone_events, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :algorithm=>:concurrently, :column=>:id})
main:    -> 0.0034s
main: -- execute("RESET statement_timeout")
main:    -> 0.0003s
main: == 20250225235326 DropTempIndexResourceMilestoneEventsParentBothPresent: migrated (0.0145s)

main: == [advisory_lock_connection] object_id: 134060, pg_backend_pid: 3020
ci: == [advisory_lock_connection] object_id: 134180, pg_backend_pid: 3022
ci: == 20250225235326 DropTempIndexResourceMilestoneEventsParentBothPresent: migrating
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0004s
ci: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :algorithm=>:concurrently})
ci:    -> 0.0028s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0003s
ci: -- remove_index(:resource_milestone_events, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :algorithm=>:concurrently, :column=>:id})
ci:    -> 0.0029s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0003s
ci: == 20250225235326 DropTempIndexResourceMilestoneEventsParentBothPresent: migrated (0.0219s)

ci: == [advisory_lock_connection] object_id: 134180, pg_backend_pid: 3022
main: == [advisory_lock_connection] object_id: 134380, pg_backend_pid: 3025
main: == 20250225235327 DropTempIndexResourceMilestoneEventsParentBothMissing: migrating
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0003s
main: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :algorithm=>:concurrently})
main:    -> 0.0024s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- remove_index(:resource_milestone_events, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :algorithm=>:concurrently, :column=>:id})
main:    -> 0.0026s
main: -- execute("RESET statement_timeout")
main:    -> 0.0003s
main: == 20250225235327 DropTempIndexResourceMilestoneEventsParentBothMissing: migrated (0.0130s)

main: == [advisory_lock_connection] object_id: 134380, pg_backend_pid: 3025
ci: == [advisory_lock_connection] object_id: 134500, pg_backend_pid: 3027
ci: == 20250225235327 DropTempIndexResourceMilestoneEventsParentBothMissing: migrating
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0004s
ci: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :algorithm=>:concurrently})
ci:    -> 0.0026s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0003s
ci: -- remove_index(:resource_milestone_events, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :algorithm=>:concurrently, :column=>:id})
ci:    -> 0.0053s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0003s
ci: == 20250225235327 DropTempIndexResourceMilestoneEventsParentBothMissing: migrated (0.0205s)

ci: == [advisory_lock_connection] object_id: 134500, pg_backend_pid: 3027
main: == [advisory_lock_connection] object_id: 134700, pg_backend_pid: 3030
main: == 20250225235328 IndexResourceMilestoneEventsOnNamespaceId: migrating ========
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0004s
main: -- index_exists?(:resource_milestone_events, :namespace_id, {:name=>"idx_resource_milestone_events_on_namespace_id", :algorithm=>:concurrently})
main:    -> 0.0024s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- add_index(:resource_milestone_events, :namespace_id, {:name=>"idx_resource_milestone_events_on_namespace_id", :algorithm=>:concurrently})
main:    -> 0.0017s
main: -- execute("RESET statement_timeout")
main:    -> 0.0003s
main: == 20250225235328 IndexResourceMilestoneEventsOnNamespaceId: migrated (0.0125s)

main: == [advisory_lock_connection] object_id: 134700, pg_backend_pid: 3030
ci: == [advisory_lock_connection] object_id: 134820, pg_backend_pid: 3032
ci: == 20250225235328 IndexResourceMilestoneEventsOnNamespaceId: migrating ========
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0004s
ci: -- index_exists?(:resource_milestone_events, :namespace_id, {:name=>"idx_resource_milestone_events_on_namespace_id", :algorithm=>:concurrently})
ci:    -> 0.0025s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0003s
ci: -- add_index(:resource_milestone_events, :namespace_id, {:name=>"idx_resource_milestone_events_on_namespace_id", :algorithm=>:concurrently})
ci:    -> 0.0014s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0003s
ci: == 20250225235328 IndexResourceMilestoneEventsOnNamespaceId: migrated (0.0163s)

ci: == [advisory_lock_connection] object_id: 134820, pg_backend_pid: 3032
main: == [advisory_lock_connection] object_id: 135020, pg_backend_pid: 3035
main: == 20250225235329 AddInvalidFkToResourceMilestoneEventsNamespaceId: migrating =
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- execute("LOCK TABLE namespaces, resource_milestone_events IN SHARE ROW EXCLUSIVE MODE")
main:    -> 0.0004s
main: -- execute("ALTER TABLE resource_milestone_events ADD CONSTRAINT fk_2867e9284c FOREIGN KEY (namespace_id) REFERENCES namespaces (id) ON DELETE CASCADE NOT VALID;")
main:    -> 0.0064s
main: == 20250225235329 AddInvalidFkToResourceMilestoneEventsNamespaceId: migrated (0.0232s)

main: == [advisory_lock_connection] object_id: 135020, pg_backend_pid: 3035
ci: == [advisory_lock_connection] object_id: 135240, pg_backend_pid: 3037
ci: == 20250225235329 AddInvalidFkToResourceMilestoneEventsNamespaceId: migrating =
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- execute("LOCK TABLE namespaces, resource_milestone_events IN SHARE ROW EXCLUSIVE MODE")
ci:    -> 0.0004s
ci: -- execute("ALTER TABLE resource_milestone_events ADD CONSTRAINT fk_2867e9284c FOREIGN KEY (namespace_id) REFERENCES namespaces (id) ON DELETE CASCADE NOT VALID;")
ci:    -> 0.0035s
ci: == 20250225235329 AddInvalidFkToResourceMilestoneEventsNamespaceId: migrated (0.0237s)

ci: == [advisory_lock_connection] object_id: 135240, pg_backend_pid: 3037
main: == [advisory_lock_connection] object_id: 135520, pg_backend_pid: 3040
main: == 20250225235330 QueueBackfillResourceMilestoneEventsNamespace: migrating ====
main: == 20250225235330 QueueBackfillResourceMilestoneEventsNamespace: migrated (0.0338s)

main: == [advisory_lock_connection] object_id: 135520, pg_backend_pid: 3040
ci: == [advisory_lock_connection] object_id: 135880, pg_backend_pid: 3042
ci: == 20250225235330 QueueBackfillResourceMilestoneEventsNamespace: migrating ====
ci: -- The migration is skipped since it modifies the schemas: [:gitlab_main].
ci: -- This database can only apply migrations in one of the following schemas: [:gitlab_ci, :gitlab_internal, :gitlab_shared].
ci: == 20250225235330 QueueBackfillResourceMilestoneEventsNamespace: migrated (0.0068s)

ci: == [advisory_lock_connection] object_id: 135880, pg_backend_pid: 3042
DOWN
main: == [advisory_lock_connection] object_id: 131440, pg_backend_pid: 2656
main: == 20250225235330 QueueBackfillResourceMilestoneEventsNamespace: reverting ====
main: == 20250225235330 QueueBackfillResourceMilestoneEventsNamespace: reverted (0.0515s)

main: == 20250225235329 AddInvalidFkToResourceMilestoneEventsNamespaceId: reverting =
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- remove_foreign_key(:resource_milestone_events, {:column=>:namespace_id})
main:    -> 0.0085s
main: == 20250225235329 AddInvalidFkToResourceMilestoneEventsNamespaceId: reverted (0.0370s)

main: == 20250225235328 IndexResourceMilestoneEventsOnNamespaceId: reverting ========
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0003s
main: -- index_exists?(:resource_milestone_events, :namespace_id, {:name=>"idx_resource_milestone_events_on_namespace_id", :algorithm=>:concurrently})
main:    -> 0.0027s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- remove_index(:resource_milestone_events, {:name=>"idx_resource_milestone_events_on_namespace_id", :algorithm=>:concurrently, :column=>:namespace_id})
main:    -> 0.0033s
main: -- execute("RESET statement_timeout")
main:    -> 0.0003s
main: == 20250225235328 IndexResourceMilestoneEventsOnNamespaceId: reverted (0.0171s)

main: == 20250225235327 DropTempIndexResourceMilestoneEventsParentBothMissing: reverting
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0003s
main: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :where=>"issue_id IS NULL AND merge_request_id IS NULL", :algorithm=>:concurrently})
main:    -> 0.0016s
main: -- add_index(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :where=>"issue_id IS NULL AND merge_request_id IS NULL", :algorithm=>:concurrently})
main:    -> 0.0038s
main: == 20250225235327 DropTempIndexResourceMilestoneEventsParentBothMissing: reverted (0.0118s)

main: == 20250225235326 DropTempIndexResourceMilestoneEventsParentBothPresent: reverting
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0003s
main: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :where=>"issue_id IS NOT NULL AND merge_request_id IS NOT NULL", :algorithm=>:concurrently})
main:    -> 0.0019s
main: -- add_index(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :where=>"issue_id IS NOT NULL AND merge_request_id IS NOT NULL", :algorithm=>:concurrently})
main:    -> 0.0008s
main: == 20250225235326 DropTempIndexResourceMilestoneEventsParentBothPresent: reverted (0.0091s)

main: == 20250225235325 AddResourceMilestoneEventsUniqueParentConstraint: reverting =
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- execute("            ALTER TABLE resource_milestone_events\n            DROP CONSTRAINT IF EXISTS check_fa0260b82e\n")
main:    -> 0.0004s
main: == 20250225235325 AddResourceMilestoneEventsUniqueParentConstraint: reverted (0.0042s)

main: == 20250225235324 CleanResourceMilestoneEventsWithTwoParents: reverting =======
main: == 20250225235324 CleanResourceMilestoneEventsWithTwoParents: reverted (0.0023s)

main: == 20250225235323 IndexResourceMilestoneEventsIssueMergeRequestBothPresent: reverting
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0003s
main: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :algorithm=>:concurrently})
main:    -> 0.0021s
main: -- remove_index(:resource_milestone_events, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :algorithm=>:concurrently, :column=>:id})
main:    -> 0.0025s
main: == 20250225235323 IndexResourceMilestoneEventsIssueMergeRequestBothPresent: reverted (0.0108s)

main: == 20250225234322 CleanResourceMilestoneEventsWithoutParent: reverting ========
main: == 20250225234322 CleanResourceMilestoneEventsWithoutParent: reverted (0.0022s)

main: == 20250225234245 IndexResourceMilestoneEventsIssueMergeRequestMissing: reverting
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0003s
main: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :algorithm=>:concurrently})
main:    -> 0.0017s
main: -- remove_index(:resource_milestone_events, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :algorithm=>:concurrently, :column=>:id})
main:    -> 0.0022s
main: == 20250225234245 IndexResourceMilestoneEventsIssueMergeRequestMissing: reverted (0.0101s)

main: == [advisory_lock_connection] object_id: 131440, pg_backend_pid: 2656
ci: == [advisory_lock_connection] object_id: 132240, pg_backend_pid: 2725
ci: == 20250225235330 QueueBackfillResourceMilestoneEventsNamespace: reverting ====
ci: -- The migration is skipped since it modifies the schemas: [:gitlab_main].
ci: -- This database can only apply migrations in one of the following schemas: [:gitlab_ci, :gitlab_internal, :gitlab_shared].
ci: == 20250225235330 QueueBackfillResourceMilestoneEventsNamespace: reverted (0.0077s)

ci: == 20250225235329 AddInvalidFkToResourceMilestoneEventsNamespaceId: reverting =
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- remove_foreign_key(:resource_milestone_events, {:column=>:namespace_id})
ci:    -> 0.0032s
ci: == 20250225235329 AddInvalidFkToResourceMilestoneEventsNamespaceId: reverted (0.0269s)

ci: == 20250225235328 IndexResourceMilestoneEventsOnNamespaceId: reverting ========
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0004s
ci: -- index_exists?(:resource_milestone_events, :namespace_id, {:name=>"idx_resource_milestone_events_on_namespace_id", :algorithm=>:concurrently})
ci:    -> 0.0032s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0005s
ci: -- remove_index(:resource_milestone_events, {:name=>"idx_resource_milestone_events_on_namespace_id", :algorithm=>:concurrently, :column=>:namespace_id})
ci:    -> 0.0037s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0007s
ci: == 20250225235328 IndexResourceMilestoneEventsOnNamespaceId: reverted (0.0284s)

ci: == 20250225235327 DropTempIndexResourceMilestoneEventsParentBothMissing: reverting
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0003s
ci: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :where=>"issue_id IS NULL AND merge_request_id IS NULL", :algorithm=>:concurrently})
ci:    -> 0.0022s
ci: -- add_index(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :where=>"issue_id IS NULL AND merge_request_id IS NULL", :algorithm=>:concurrently})
ci:    -> 0.0036s
ci: == 20250225235327 DropTempIndexResourceMilestoneEventsParentBothMissing: reverted (0.0181s)

ci: == 20250225235326 DropTempIndexResourceMilestoneEventsParentBothPresent: reverting
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0003s
ci: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :where=>"issue_id IS NOT NULL AND merge_request_id IS NOT NULL", :algorithm=>:concurrently})
ci:    -> 0.0027s
ci: -- add_index(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :where=>"issue_id IS NOT NULL AND merge_request_id IS NOT NULL", :algorithm=>:concurrently})
ci:    -> 0.0009s
ci: == 20250225235326 DropTempIndexResourceMilestoneEventsParentBothPresent: reverted (0.0157s)

ci: == 20250225235325 AddResourceMilestoneEventsUniqueParentConstraint: reverting =
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- execute("            ALTER TABLE resource_milestone_events\n            DROP CONSTRAINT IF EXISTS check_fa0260b82e\n")
ci:    -> 0.0073s
ci: == 20250225235325 AddResourceMilestoneEventsUniqueParentConstraint: reverted (0.0168s)

ci: == 20250225235324 CleanResourceMilestoneEventsWithTwoParents: reverting =======
ci: -- The migration is skipped since it modifies the schemas: [:gitlab_main].
ci: -- This database can only apply migrations in one of the following schemas: [:gitlab_ci, :gitlab_internal, :gitlab_shared].
ci: == 20250225235324 CleanResourceMilestoneEventsWithTwoParents: reverted (0.0076s)

ci: == 20250225235323 IndexResourceMilestoneEventsIssueMergeRequestBothPresent: reverting
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0004s
ci: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :algorithm=>:concurrently})
ci:    -> 0.0020s
ci: -- remove_index(:resource_milestone_events, {:name=>"tmp_idx_resource_milestone_events_issue_mr_both_present", :algorithm=>:concurrently, :column=>:id})
ci:    -> 0.0032s
ci: == 20250225235323 IndexResourceMilestoneEventsIssueMergeRequestBothPresent: reverted (0.0166s)

ci: == 20250225234322 CleanResourceMilestoneEventsWithoutParent: reverting ========
ci: -- The migration is skipped since it modifies the schemas: [:gitlab_main].
ci: -- This database can only apply migrations in one of the following schemas: [:gitlab_ci, :gitlab_internal, :gitlab_shared].
ci: == 20250225234322 CleanResourceMilestoneEventsWithoutParent: reverted (0.0071s)

ci: == 20250225234245 IndexResourceMilestoneEventsIssueMergeRequestMissing: reverting
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0004s
ci: -- index_exists?(:resource_milestone_events, :id, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :algorithm=>:concurrently})
ci:    -> 0.0021s
ci: -- remove_index(:resource_milestone_events, {:name=>"tmp_idx_resource_milestone_events_issue_mr_missing", :algorithm=>:concurrently, :column=>:id})
ci:    -> 0.0024s
ci: == 20250225234245 IndexResourceMilestoneEventsIssueMergeRequestMissing: reverted (0.0154s)

ci: == [advisory_lock_connection] object_id: 132240, pg_backend_pid: 2725

main: == [advisory_lock_connection] object_id: 131420, pg_backend_pid: 2813
main: == 20250224204225 AddRsourceMilestoneEventsShardingKey: reverting =============
main: -- remove_column(:resource_milestone_events, :namespace_id, :bigint, {:null=>false, :default=>0})
main:    -> 0.0018s
main: == 20250224204225 AddRsourceMilestoneEventsShardingKey: reverted (0.0081s) ====

main: == [advisory_lock_connection] object_id: 131420, pg_backend_pid: 2813
ci: == [advisory_lock_connection] object_id: 131980, pg_backend_pid: 2842
ci: == 20250224204225 AddRsourceMilestoneEventsShardingKey: reverting =============
ci: -- remove_column(:resource_milestone_events, :namespace_id, :bigint, {:null=>false, :default=>0})
ci:    -> 0.0028s
ci: == 20250224204225 AddRsourceMilestoneEventsShardingKey: reverted (0.0174s) ====

ci: == [advisory_lock_connection] object_id: 131980, pg_backend_pid: 2842

MR acceptance checklist

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

Related to #514593 (closed)

Edited by Mario Celi

Merge request reports

Loading