From 4917d4151a855cc87b1fb40fb487d8f33e7aca60 Mon Sep 17 00:00:00 2001 From: George Koltsov <gkoltsov@gitlab.com> Date: Tue, 29 Oct 2024 12:03:34 +0000 Subject: [PATCH] Update instance_integrations table to match integrations schema - Add project_id/group_id/inherit_from_id columns to match existing integrations table for easier transition of data - Add IS NULL constraints to project_id/group_id/inherit_from_id since these values will always be null for instance integrations - Add instance=true constraint Changelog: other --- .../integrations/instance_integration.rb | 5 ++++ ...1427_update_instance_integrations_table.rb | 26 +++++++++++++++++++ ..._instance_integrations_type_to_type_new.rb | 15 +++++++++++ ...eanup_instance_integrations_type_rename.rb | 15 +++++++++++ db/schema_migrations/20241023091427 | 1 + db/schema_migrations/20241024125520 | 1 + db/schema_migrations/20241024132407 | 1 + db/structure.sql | 12 +++++++-- spec/db/schema_spec.rb | 3 ++- 9 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20241023091427_update_instance_integrations_table.rb create mode 100644 db/migrate/20241024125520_rename_instance_integrations_type_to_type_new.rb create mode 100644 db/post_migrate/20241024132407_cleanup_instance_integrations_type_rename.rb create mode 100644 db/schema_migrations/20241023091427 create mode 100644 db/schema_migrations/20241024125520 create mode 100644 db/schema_migrations/20241024132407 diff --git a/app/models/integrations/instance_integration.rb b/app/models/integrations/instance_integration.rb index 9fc52fb570808..bca4e11e09d11 100644 --- a/app/models/integrations/instance_integration.rb +++ b/app/models/integrations/instance_integration.rb @@ -2,6 +2,11 @@ module Integrations class InstanceIntegration < Integration + include IgnorableColumns + self.table_name = 'instance_integrations' + self.inheritance_column = :type_new # rubocop:disable Database/AvoidInheritanceColumn -- supporting instance integrations migration + + ignore_column :type, remove_with: '17.7', remove_after: '2024-12-02' end end diff --git a/db/migrate/20241023091427_update_instance_integrations_table.rb b/db/migrate/20241023091427_update_instance_integrations_table.rb new file mode 100644 index 0000000000000..a038f39ef4d37 --- /dev/null +++ b/db/migrate/20241023091427_update_instance_integrations_table.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +class UpdateInstanceIntegrationsTable < Gitlab::Database::Migration[2.2] + milestone '17.6' + + disable_ddl_transaction! + + def up + add_column :instance_integrations, :project_id, :bigint, null: true, if_not_exists: true + add_column :instance_integrations, :group_id, :bigint, null: true, if_not_exists: true + add_column :instance_integrations, :inherit_from_id, :bigint, null: true, if_not_exists: true + add_column :instance_integrations, :instance, :boolean, default: true, if_not_exists: true + + add_check_constraint :instance_integrations, 'project_id IS NULL', 'project_id_null_constraint' + add_check_constraint :instance_integrations, 'group_id IS NULL', 'group_id_null_constraint' + add_check_constraint :instance_integrations, 'inherit_from_id IS NULL', 'inherit_from_id_null_constraint' + add_check_constraint :instance_integrations, 'instance = TRUE', 'instance_is_true_constraint' + end + + def down + remove_column :instance_integrations, :project_id, if_exists: true + remove_column :instance_integrations, :group_id, if_exists: true + remove_column :instance_integrations, :inherit_from_id, if_exists: true + remove_column :instance_integrations, :instance, if_exists: true + end +end diff --git a/db/migrate/20241024125520_rename_instance_integrations_type_to_type_new.rb b/db/migrate/20241024125520_rename_instance_integrations_type_to_type_new.rb new file mode 100644 index 0000000000000..56b24db8a236e --- /dev/null +++ b/db/migrate/20241024125520_rename_instance_integrations_type_to_type_new.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class RenameInstanceIntegrationsTypeToTypeNew < Gitlab::Database::Migration[2.2] + milestone '17.6' + + disable_ddl_transaction! + + def up + rename_column_concurrently :instance_integrations, :type, :type_new + end + + def down + undo_rename_column_concurrently :instance_integrations, :type, :type_new + end +end diff --git a/db/post_migrate/20241024132407_cleanup_instance_integrations_type_rename.rb b/db/post_migrate/20241024132407_cleanup_instance_integrations_type_rename.rb new file mode 100644 index 0000000000000..4497109917a27 --- /dev/null +++ b/db/post_migrate/20241024132407_cleanup_instance_integrations_type_rename.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class CleanupInstanceIntegrationsTypeRename < Gitlab::Database::Migration[2.2] + milestone '17.6' + + disable_ddl_transaction! + + def up + cleanup_concurrent_column_rename :instance_integrations, :type, :type_new + end + + def down + undo_cleanup_concurrent_column_rename :instance_integrations, :type, :type_new + end +end diff --git a/db/schema_migrations/20241023091427 b/db/schema_migrations/20241023091427 new file mode 100644 index 0000000000000..c59a1c6410933 --- /dev/null +++ b/db/schema_migrations/20241023091427 @@ -0,0 +1 @@ +dcfbdf675f0ebc3b0a05881fa19cffcf505f977c86d355e0a67535c96f309945 \ No newline at end of file diff --git a/db/schema_migrations/20241024125520 b/db/schema_migrations/20241024125520 new file mode 100644 index 0000000000000..be8a359c5760d --- /dev/null +++ b/db/schema_migrations/20241024125520 @@ -0,0 +1 @@ +a1d6a2bbb0053e26d256ea9a86e618df16e73cb91cbbdb74772c8c5c4d5368a9 \ No newline at end of file diff --git a/db/schema_migrations/20241024132407 b/db/schema_migrations/20241024132407 new file mode 100644 index 0000000000000..610da62c622a6 --- /dev/null +++ b/db/schema_migrations/20241024132407 @@ -0,0 +1 @@ +573b6e641a7da39f16be66702d687f266d4bf084e6816acd98380716cc09d5bf \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index cdbcf563f2650..630084c4cd579 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -12720,11 +12720,19 @@ CREATE TABLE instance_integrations ( group_mention_events boolean DEFAULT false NOT NULL, group_confidential_mention_events boolean DEFAULT false NOT NULL, category text DEFAULT 'common'::text, - type text, encrypted_properties bytea, encrypted_properties_iv bytea, + project_id bigint, + group_id bigint, + inherit_from_id bigint, + instance boolean DEFAULT true, + type_new text, + CONSTRAINT check_2f305455fe CHECK ((char_length(type_new) <= 255)), CONSTRAINT check_611836812c CHECK ((char_length(category) <= 255)), - CONSTRAINT check_69b7b09aa8 CHECK ((char_length(type) <= 255)) + CONSTRAINT group_id_null_constraint CHECK ((group_id IS NULL)), + CONSTRAINT inherit_from_id_null_constraint CHECK ((inherit_from_id IS NULL)), + CONSTRAINT instance_is_true_constraint CHECK ((instance = true)), + CONSTRAINT project_id_null_constraint CHECK ((project_id IS NULL)) ); CREATE SEQUENCE instance_integrations_id_seq diff --git a/spec/db/schema_spec.rb b/spec/db/schema_spec.rb index d62a5455848bb..9852176784e84 100644 --- a/spec/db/schema_spec.rb +++ b/spec/db/schema_spec.rb @@ -230,7 +230,8 @@ ai_testing_terms_acceptances: %w[user_id], # testing terms only have 1 entry, and if the user is deleted the record should remain namespace_settings: %w[early_access_program_joined_by_id], # isn't used inside product itself. Only through Snowflake workspaces_agent_config_versions: %w[item_id], # polymorphic associations - work_item_types: %w[correct_id] # temporary column that is not a foreign key + work_item_types: %w[correct_id], # temporary column that is not a foreign key + instance_integrations: %w[project_id group_id inherit_from_id] # these columns are not used in instance integrations }.with_indifferent_access.freeze context 'for table' do -- GitLab