Add migration to backfill user_group_member_roles for direct membership

What does this MR do and why?

  • Resolves part-1 of #520189 (closed)
  • Creates a background migration to populate the user_group_member_roles table from the members table for group members that have a member role assigned to them.
  • As part of that, it creates a temporary index on the members table.
  • This MR is part of a bigger epic to cache member roles, #513033

Database

  1. Migration:
main: == 20250804025048 AddTmpIndexToMembersForGroupMembersWithMemberRole: migrating 
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0107s
main: -- index_exists?(:members, [:id, :source_id], {:name=>:tmp_idx_members_on_id_for_group_members_with_member_role, :where=>"member_role_id IS NOT NULL AND source_type = 'Namespace'", :algorithm=>:concurrently})
main:    -> 0.0061s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- add_index(:members, [:id, :source_id], {:name=>:tmp_idx_members_on_id_for_group_members_with_member_role, :where=>"member_role_id IS NOT NULL AND source_type = 'Namespace'", :algorithm=>:concurrently})
main:    -> 0.0065s
main: -- execute("RESET statement_timeout")
main:    -> 0.0005s
main: == 20250804025048 AddTmpIndexToMembersForGroupMembersWithMemberRole: migrated (0.0386s) 
  1. BBM Query plan

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.

Related to #520189 (closed)

Edited by Hinam Mehra

Merge request reports

Loading