Add default_compliance_framework_id column to namespace_settings table
What does this MR do and why?
- Add a new column
default_compliance_framework_id
to thenamespace_settings
table which will be used for setting a default compliance framework at a group level and this compliance framework will be added to all the newly created projects under that group.
Screenshots or screen recordings
Screenshots are required for UI changes, and strongly recommended for all other merge requests.
Database
Migration logs up
main: == 20221010121807 AddComplianceFrameworkIdToNamespaceSettings: migrating ======
main: -- add_column(:namespace_settings, :default_compliance_framework_id, :bigint)
main: -> 0.0025s
main: == 20221010121807 AddComplianceFrameworkIdToNamespaceSettings: migrated (0.0029s)
main: == 20221010122352 AddIndexToNamespaceSettingsOnDefaultComplianceFrameworkId: migrating
main: -- transaction_open?()
main: -> 0.0000s
main: -- index_exists?(:namespace_settings, :default_compliance_framework_id, {:unique=>true, :name=>"idx_namespace_settings_on_default_compliance_framework_id", :algorithm=>:concurrently})
main: -> 0.0024s
main: -- execute("SET statement_timeout TO 0")
main: -> 0.0002s
main: -- add_index(:namespace_settings, :default_compliance_framework_id, {:unique=>true, :name=>"idx_namespace_settings_on_default_compliance_framework_id", :algorithm=>:concurrently})
main: -> 0.0026s
main: -- execute("RESET statement_timeout")
main: -> 0.0002s
main: == 20221010122352 AddIndexToNamespaceSettingsOnDefaultComplianceFrameworkId: migrated (0.0134s)
main: == 20221010123040 AddComplianceFrameworkFkToNamespaceSettings: migrating ======
main: -- transaction_open?()
main: -> 0.0000s
main: -- foreign_keys(:namespace_settings)
main: -> 0.0024s
main: -- transaction_open?()
main: -> 0.0000s
main: -- execute("LOCK TABLE compliance_management_frameworks, namespace_settings IN SHARE ROW EXCLUSIVE MODE")
main: -> 0.0003s
main: -- execute("ALTER TABLE namespace_settings\nADD CONSTRAINT fk_20cf0eb2f9\nFOREIGN KEY (default_compliance_framework_id)\nREFERENCES compliance_management_frameworks (id)\nON DELETE SET NULL\nNOT VALID;\n")
main: -> 0.0009s
main: -- execute("ALTER TABLE namespace_settings VALIDATE CONSTRAINT fk_20cf0eb2f9;")
main: -> 0.0018s
main: == 20221010123040 AddComplianceFrameworkFkToNamespaceSettings: migrated (0.0148s)
ci: == 20221010121807 AddComplianceFrameworkIdToNamespaceSettings: migrating ======
ci: -- add_column(:namespace_settings, :default_compliance_framework_id, :bigint)
ci: -> 0.0008s
ci: == 20221010121807 AddComplianceFrameworkIdToNamespaceSettings: migrated (0.0009s)
ci: == 20221010122352 AddIndexToNamespaceSettingsOnDefaultComplianceFrameworkId: migrating
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- index_exists?(:namespace_settings, :default_compliance_framework_id, {:unique=>true, :name=>"idx_namespace_settings_on_default_compliance_framework_id", :algorithm=>:concurrently})
ci: -> 0.0012s
ci: -- execute("SET statement_timeout TO 0")
ci: -> 0.0002s
ci: -- add_index(:namespace_settings, :default_compliance_framework_id, {:unique=>true, :name=>"idx_namespace_settings_on_default_compliance_framework_id", :algorithm=>:concurrently})
ci: -> 0.0037s
ci: -- execute("RESET statement_timeout")
ci: -> 0.0002s
ci: == 20221010122352 AddIndexToNamespaceSettingsOnDefaultComplianceFrameworkId: migrated (0.0070s)
ci: == 20221010123040 AddComplianceFrameworkFkToNamespaceSettings: migrating ======
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- foreign_keys(:namespace_settings)
ci: -> 0.0020s
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- execute("LOCK TABLE compliance_management_frameworks, namespace_settings IN SHARE ROW EXCLUSIVE MODE")
ci: -> 0.0003s
ci: -- execute("ALTER TABLE namespace_settings\nADD CONSTRAINT fk_20cf0eb2f9\nFOREIGN KEY (default_compliance_framework_id)\nREFERENCES compliance_management_frameworks (id)\nON DELETE SET NULL\nNOT VALID;\n")
ci: -> 0.0006s
ci: -- execute("ALTER TABLE namespace_settings VALIDATE CONSTRAINT fk_20cf0eb2f9;")
ci: -> 0.0014s
ci: == 20221010123040 AddComplianceFrameworkFkToNamespaceSettings: migrated (0.0061s)
Migration logs down
ci: == 20221010123040 AddComplianceFrameworkFkToNamespaceSettings: reverting ======
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- remove_foreign_key(:namespace_settings, {:column=>:default_compliance_framework_id})
ci: -> 0.0044s
ci: == 20221010123040 AddComplianceFrameworkFkToNamespaceSettings: reverted (0.0106s)
ci: == 20221010122352 AddIndexToNamespaceSettingsOnDefaultComplianceFrameworkId: reverting
ci: -- transaction_open?()
ci: -> 0.0000s
ci: -- index_exists?(:namespace_settings, :default_compliance_framework_id, {:name=>"idx_namespace_settings_on_default_compliance_framework_id", :algorithm=>:concurrently})
ci: -> 0.0017s
ci: -- execute("SET statement_timeout TO 0")
ci: -> 0.0002s
ci: -- remove_index(:namespace_settings, {:name=>"idx_namespace_settings_on_default_compliance_framework_id", :algorithm=>:concurrently, :column=>:default_compliance_framework_id})
ci: -> 0.0024s
ci: -- execute("RESET statement_timeout")
ci: -> 0.0002s
ci: == 20221010122352 AddIndexToNamespaceSettingsOnDefaultComplianceFrameworkId: reverted (0.0080s)
ci: == 20221010121807 AddComplianceFrameworkIdToNamespaceSettings: reverting ======
ci: -- remove_column(:namespace_settings, :default_compliance_framework_id, :bigint)
ci: -> 0.0006s
ci: == 20221010121807 AddComplianceFrameworkIdToNamespaceSettings: reverted (0.0014s)
main: == 20221010123040 AddComplianceFrameworkFkToNamespaceSettings: reverting ======
main: -- transaction_open?()
main: -> 0.0000s
main: -- remove_foreign_key(:namespace_settings, {:column=>:default_compliance_framework_id})
main: -> 0.0041s
main: == 20221010123040 AddComplianceFrameworkFkToNamespaceSettings: reverted (0.0104s)
main: == 20221010122352 AddIndexToNamespaceSettingsOnDefaultComplianceFrameworkId: reverting
main: -- transaction_open?()
main: -> 0.0000s
main: -- index_exists?(:namespace_settings, :default_compliance_framework_id, {:name=>"idx_namespace_settings_on_default_compliance_framework_id", :algorithm=>:concurrently})
main: -> 0.0016s
main: -- execute("SET statement_timeout TO 0")
main: -> 0.0002s
main: -- remove_index(:namespace_settings, {:name=>"idx_namespace_settings_on_default_compliance_framework_id", :algorithm=>:concurrently, :column=>:default_compliance_framework_id})
main: -> 0.0022s
main: -- execute("RESET statement_timeout")
main: -> 0.0002s
main: == 20221010122352 AddIndexToNamespaceSettingsOnDefaultComplianceFrameworkId: reverted (0.0077s)
main: == 20221010121807 AddComplianceFrameworkIdToNamespaceSettings: reverting ======
main: -- remove_column(:namespace_settings, :default_compliance_framework_id, :bigint)
main: -> 0.0005s
main: == 20221010121807 AddComplianceFrameworkIdToNamespaceSettings: reverted (0.0013s)
How to set up and validate locally
Numbered steps to set up and validate the change are strongly suggested.
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Related to #375035 (closed)
Edited by Huzaifa Iftikhar