Skip to content

Group approval rules migration

Gavin Hinfey requested to merge 325646-group-approval-rules-migration into master

What does this MR do and why?

Creates tables required to support the management of group-level MR approval rules required by #325646 (closed).

To keep the MR small, the model ApprovalGroupRul is in a followup Add approval group rule model (!132862 - merged).

This is a continuation of the work done in !57800 (closed). High-level design #293957.

Database

Migration/Rollback Log

Migrate
== [advisory_lock_connection] object_id: 226920, pg_backend_pid: 47275
== 20230926092914 AddApprovalGroupRules: migrating ============================
== [advisory_lock_connection] object_id: 227220, pg_backend_pid: 67388
== 20230926093004 AddApprovalGroupsRulesUsers: migrating ======================
-- create_table(:approval_group_rules_users)
   -> 0.0145s
== 20230926093004 AddApprovalGroupsRulesUsers: migrated (0.1713s) =============

== 20230926093025 AddApprovalGroupRulesProtectedBranches: migrating ===========
-- create_table(:approval_group_rules_protected_branches)
   -> 0.0070s
== 20230926093025 AddApprovalGroupRulesProtectedBranches: migrated (0.0115s) ==

== 20230926093101 AddFkToApprovalRuleOnApprovalGroupRulesUsers: migrating =====
-- transaction_open?(nil)
   -> 0.0002s
-- transaction_open?(nil)
   -> 0.0000s
-- execute("ALTER TABLE approval_group_rules_users ADD CONSTRAINT fk_9a4b673183 FOREIGN KEY (approval_group_rule_id) REFERENCES approval_group_rules (id) ON DELETE CASCADE NOT VALID;")
   -> 0.0017s
-- execute("SET statement_timeout TO 0")
   -> 0.0002s
-- execute("ALTER TABLE approval_group_rules_users VALIDATE CONSTRAINT fk_9a4b673183;")
   -> 0.0032s
-- execute("RESET statement_timeout")
   -> 0.0003s
== 20230926093101 AddFkToApprovalRuleOnApprovalGroupRulesUsers: migrated (0.0457s)

== 20230926093144 AddFkToUserOnApprovalGroupRulesUsers: migrating =============
-- transaction_open?(nil)
   -> 0.0000s
-- transaction_open?(nil)
   -> 0.0000s
-- execute("ALTER TABLE approval_group_rules_users ADD CONSTRAINT fk_888a0df3b7 FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE NOT VALID;")
   -> 0.0016s
-- execute("ALTER TABLE approval_group_rules_users VALIDATE CONSTRAINT fk_888a0df3b7;")
   -> 0.0071s
== 20230926093144 AddFkToUserOnApprovalGroupRulesUsers: migrated (0.0272s) ====

== 20230926093211 AddFkToApprovalRuleOnApprovalGroupRulesGroups: migrating ====
-- transaction_open?(nil)
   -> 0.0000s
-- transaction_open?(nil)
   -> 0.0000s
-- execute("ALTER TABLE approval_group_rules_groups ADD CONSTRAINT fk_efff219a48 FOREIGN KEY (approval_group_rule_id) REFERENCES approval_group_rules (id) ON DELETE CASCADE NOT VALID;")
   -> 0.0006s
-- execute("ALTER TABLE approval_group_rules_groups VALIDATE CONSTRAINT fk_efff219a48;")
   -> 0.0015s
== 20230926093211 AddFkToApprovalRuleOnApprovalGroupRulesGroups: migrated (0.0172s)

== 20230926093251 AddFkToGroupOnApprovalGroupRulesGroups: migrating ===========
-- transaction_open?(nil)
   -> 0.0000s
-- transaction_open?(nil)
   -> 0.0000s
-- execute("ALTER TABLE approval_group_rules_groups ADD CONSTRAINT fk_50edc8134e FOREIGN KEY (group_id) REFERENCES namespaces (id) ON DELETE CASCADE NOT VALID;")
   -> 0.0032s
-- execute("ALTER TABLE approval_group_rules_groups VALIDATE CONSTRAINT fk_50edc8134e;")
   -> 0.0070s
== 20230926093251 AddFkToGroupOnApprovalGroupRulesGroups: migrated (0.0266s) ==

== 20230926105440 AddFkToApprovalRuleOnApprovalGroupRulesProtectedBranches: migrating
-- transaction_open?(nil)
   -> 0.0000s
-- transaction_open?(nil)
   -> 0.0000s
-- execute("ALTER TABLE approval_group_rules_protected_branches ADD CONSTRAINT fk_4f85f13b20 FOREIGN KEY (approval_group_rule_id) REFERENCES approval_group_rules (id) ON DELETE CASCADE NOT VALID;")
   -> 0.0007s
-- execute("ALTER TABLE approval_group_rules_protected_branches VALIDATE CONSTRAINT fk_4f85f13b20;")
   -> 0.0006s
== 20230926105440 AddFkToApprovalRuleOnApprovalGroupRulesProtectedBranches: migrated (0.0166s)

== 20230926105931 AddFkToProtectedBranchOnApprovalGroupRulesProtectedBranches: migrating
-- transaction_open?(nil)
   -> 0.0000s
-- transaction_open?(nil)
   -> 0.0000s
-- execute("ALTER TABLE approval_group_rules_protected_branches ADD CONSTRAINT fk_0b85e6c388 FOREIGN KEY (protected_branch_id) REFERENCES protected_branches (id) ON DELETE CASCADE NOT VALID;")
   -> 0.0012s
-- execute("ALTER TABLE approval_group_rules_protected_branches VALIDATE CONSTRAINT fk_0b85e6c388;")
   -> 0.0017s
== 20230926105931 AddFkToProtectedBranchOnApprovalGroupRulesProtectedBranches: migrated (0.0165s)

== 20230926113518 RemoveApplicationSettingsAiAccessTokenColumn: migrating =====
-- remove_column(:application_settings, :encrypted_ai_access_token)
   -> 0.0012s
-- remove_column(:application_settings, :encrypted_ai_access_token_iv)
   -> 0.0005s
== 20230926113518 RemoveApplicationSettingsAiAccessTokenColumn: migrated (0.0042s)

== 20230926201357 DropIndexNamespacesOnTypeAndVisibilityAndParentId: migrating
-- transaction_open?(nil)
   -> 0.0000s
-- view_exists?(:postgres_partitions)
   -> 0.0004s
-- indexes("namespaces")
   -> 0.0092s
-- remove_index("namespaces", {:algorithm=>:concurrently, :name=>"index_namespaces_on_type_and_visibility_and_parent_id"})
   -> 0.0024s
== 20230926201357 DropIndexNamespacesOnTypeAndVisibilityAndParentId: migrated (0.0265s)

== 20230928145555 AddFkToSecurityOrchestrationPolicyConfigurationOnApprovalGroupRules: migrating
-- transaction_open?(nil)
   -> 0.0000s
-- transaction_open?(nil)
   -> 0.0000s
-- execute("ALTER TABLE approval_group_rules ADD CONSTRAINT fk_64450bea52 FOREIGN KEY (security_orchestration_policy_configuration_id) REFERENCES security_orchestration_policy_configurations (id) ON DELETE CASCADE NOT VALID;")
   -> 0.0018s
-- execute("ALTER TABLE approval_group_rules VALIDATE CONSTRAINT fk_64450bea52;")
   -> 0.0025s
== 20230928145555 AddFkToSecurityOrchestrationPolicyConfigurationOnApprovalGroupRules: migrated (0.0318s)

== 20230928145637 AddFkToScanResultPolicyOnApprovalGroupRules: migrating ======
-- transaction_open?(nil)
   -> 0.0000s
-- transaction_open?(nil)
   -> 0.0001s
-- execute("ALTER TABLE approval_group_rules ADD CONSTRAINT fk_1485c451e3 FOREIGN KEY (scan_result_policy_id) REFERENCES scan_result_policies (id) ON DELETE CASCADE NOT VALID;")
   -> 0.0009s
-- execute("ALTER TABLE approval_group_rules VALIDATE CONSTRAINT fk_1485c451e3;")
   -> 0.0015s
== 20230928145637 AddFkToScanResultPolicyOnApprovalGroupRules: migrated (0.0235s)

== [advisory_lock_connection] object_id: 227220, pg_backend_pid: 67388
Rollback
== [advisory_lock_connection] object_id: 227000, pg_backend_pid: 66809
== 20230928145637 AddFkToScanResultPolicyOnApprovalGroupRules: reverting ======
-- transaction_open?(nil)
   -> 0.0000s
-- remove_foreign_key(:approval_group_rules, {:column=>:scan_result_policy_id})
   -> 0.1073s
== 20230928145637 AddFkToScanResultPolicyOnApprovalGroupRules: reverted (0.1223s)

== 20230928145555 AddFkToSecurityOrchestrationPolicyConfigurationOnApprovalGroupRules: reverting
-- transaction_open?(nil)
   -> 0.0000s
-- remove_foreign_key(:approval_group_rules, {:column=>:security_orchestration_policy_configuration_id})
   -> 0.0036s
== 20230928145555 AddFkToSecurityOrchestrationPolicyConfigurationOnApprovalGroupRules: reverted (0.0087s)

== 20230926201357 DropIndexNamespacesOnTypeAndVisibilityAndParentId: reverting
-- transaction_open?(nil)
   -> 0.0000s
-- view_exists?(:postgres_partitions)
   -> 0.0005s
-- index_exists?("namespaces", :id, {:name=>"index_namespaces_on_type_and_visibility_and_parent_id", :where=>"(type = 'Group' AND parent_id IS NULL AND visibility_level != 20)", :algorithm=>:concurrently})
   -> 0.0144s
-- execute("SET statement_timeout TO 0")
   -> 0.0003s
-- add_index("namespaces", :id, {:name=>"index_namespaces_on_type_and_visibility_and_parent_id", :where=>"(type = 'Group' AND parent_id IS NULL AND visibility_level != 20)", :algorithm=>:concurrently})
   -> 0.0065s
-- execute("RESET statement_timeout")
   -> 0.0005s
== 20230926201357 DropIndexNamespacesOnTypeAndVisibilityAndParentId: reverted (0.0373s)

== 20230926113518 RemoveApplicationSettingsAiAccessTokenColumn: reverting =====
-- add_column(:application_settings, :encrypted_ai_access_token, :binary)
   -> 0.0012s
-- add_column(:application_settings, :encrypted_ai_access_token_iv, :binary)
   -> 0.0006s
== 20230926113518 RemoveApplicationSettingsAiAccessTokenColumn: reverted (0.0052s)

== 20230926105931 AddFkToProtectedBranchOnApprovalGroupRulesProtectedBranches: reverting
-- transaction_open?(nil)
   -> 0.0000s
-- remove_foreign_key(:approval_group_rules_protected_branches, {:column=>:protected_branch_id})
   -> 0.0034s
== 20230926105931 AddFkToProtectedBranchOnApprovalGroupRulesProtectedBranches: reverted (0.0088s)

== 20230926105440 AddFkToApprovalRuleOnApprovalGroupRulesProtectedBranches: reverting
-- transaction_open?(nil)
   -> 0.0000s
-- remove_foreign_key(:approval_group_rules_protected_branches, {:column=>:approval_group_rule_id})
   -> 0.0029s
== 20230926105440 AddFkToApprovalRuleOnApprovalGroupRulesProtectedBranches: reverted (0.0121s)

== 20230926093251 AddFkToGroupOnApprovalGroupRulesGroups: reverting ===========
-- transaction_open?(nil)
   -> 0.0000s
-- remove_foreign_key(:approval_group_rules_groups, {:column=>:group_id})
   -> 0.0031s
== 20230926093251 AddFkToGroupOnApprovalGroupRulesGroups: reverted (0.0081s) ==

== 20230926093211 AddFkToApprovalRuleOnApprovalGroupRulesGroups: reverting ====
-- transaction_open?(nil)
   -> 0.0000s
-- remove_foreign_key(:approval_group_rules_groups, {:column=>:approval_group_rule_id})
   -> 0.0028s
== 20230926093211 AddFkToApprovalRuleOnApprovalGroupRulesGroups: reverted (0.0084s)

== 20230926093144 AddFkToUserOnApprovalGroupRulesUsers: reverting =============
-- transaction_open?(nil)
   -> 0.0001s
-- remove_foreign_key(:approval_group_rules_users, {:column=>:user_id})
   -> 0.0027s
== 20230926093144 AddFkToUserOnApprovalGroupRulesUsers: reverted (0.0079s) ====

== 20230926093101 AddFkToApprovalRuleOnApprovalGroupRulesUsers: reverting =====
-- transaction_open?(nil)
   -> 0.0000s
-- remove_foreign_key(:approval_group_rules_users, {:column=>:approval_group_rule_id})
   -> 0.0023s
== 20230926093101 AddFkToApprovalRuleOnApprovalGroupRulesUsers: reverted (0.0073s)

== 20230926093025 AddApprovalGroupRulesProtectedBranches: reverting ===========
-- drop_table(:approval_group_rules_protected_branches)
   -> 0.0020s
== 20230926093025 AddApprovalGroupRulesProtectedBranches: reverted (0.0056s) ==

== 20230926093004 AddApprovalGroupsRulesUsers: reverting ======================
-- drop_table(:approval_group_rules_users)
   -> 0.0008s
== 20230926093004 AddApprovalGroupsRulesUsers: reverted (0.0045s) =============

== [advisory_lock_connection] object_id: 227000, pg_backend_pid: 66809

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Gavin Hinfey

Merge request reports