Skip to content

Cleanup remaining alerts service code

Sarah Yasonik requested to merge sy-remove-final-alerts-service-pieces into master

What does this MR do?

This MR removes the final pieces of deprecated AlertsService. !50913 (merged) removed the bulk of the AlertsService logic & info last milestone.

Related issue: #296923 (closed)

Migration Output

The database changes follow the process laid out in https://docs.gitlab.com/ee/development/migration_style_guide.html#dropping-a-database-table & https://docs.gitlab.com/ee/development/what_requires_downtime.html#dropping-tables.

Up

DB state - before running migrations
$ bin/rails dbconsole
psql (11.9)
Type "help" for help.

gitlabhq_development=# \d alerts_service_data
                                           Table "public.alerts_service_data"
       Column       |           Type           | Collation | Nullable |                     Default                     
--------------------+--------------------------+-----------+----------+-------------------------------------------------
 id                 | bigint                   |           | not null | nextval('alerts_service_data_id_seq'::regclass)
 service_id         | integer                  |           | not null | 
 created_at         | timestamp with time zone |           | not null | 
 updated_at         | timestamp with time zone |           | not null | 
 encrypted_token    | character varying(255)   |           |          | 
 encrypted_token_iv | character varying(255)   |           |          | 
Indexes:
    "alerts_service_data_pkey" PRIMARY KEY, btree (id)
    "index_alerts_service_data_on_service_id" btree (service_id)
Foreign-key constraints:
    "fk_rails_b93215a42c" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE

gitlabhq_development=# \d services
                                                Table "public.services"
           Column           |            Type             | Collation | Nullable |               Default                
----------------------------+-----------------------------+-----------+----------+--------------------------------------
 id                         | integer                     |           | not null | nextval('services_id_seq'::regclass)
 type                       | character varying           |           |          | 
 project_id                 | integer                     |           |          | 
 created_at                 | timestamp without time zone |           |          | 
 updated_at                 | timestamp without time zone |           |          | 
 active                     | boolean                     |           | not null | false
 properties                 | text                        |           |          | 
 push_events                | boolean                     |           |          | true
 issues_events              | boolean                     |           |          | true
 merge_requests_events      | boolean                     |           |          | true
 tag_push_events            | boolean                     |           |          | true
 note_events                | boolean                     |           | not null | true
 category                   | character varying           |           | not null | 'common'::character varying
 wiki_page_events           | boolean                     |           |          | true
 pipeline_events            | boolean                     |           | not null | false
 confidential_issues_events | boolean                     |           | not null | true
 commit_events              | boolean                     |           | not null | true
 job_events                 | boolean                     |           | not null | false
 confidential_note_events   | boolean                     |           |          | true
 deployment_events          | boolean                     |           | not null | false
 comment_on_event_enabled   | boolean                     |           | not null | true
 template                   | boolean                     |           |          | false
 instance                   | boolean                     |           | not null | false
 comment_detail             | smallint                    |           |          | 
 inherit_from_id            | bigint                      |           |          | 
 alert_events               | boolean                     |           |          | 
 group_id                   | bigint                      |           |          | 
Indexes:
    "services_pkey" PRIMARY KEY, btree (id)
    "index_services_on_project_id_and_type_unique" UNIQUE, btree (project_id, type)
    "index_services_on_type_and_instance_partial" UNIQUE, btree (type, instance) WHERE instance = true
    "index_services_on_type_and_template_partial" UNIQUE, btree (type, template) WHERE template = true
    "index_services_on_unique_group_id_and_type" UNIQUE, btree (group_id, type)
    "index_services_on_inherit_from_id" btree (inherit_from_id)
    "index_services_on_template" btree (template)
    "index_services_on_type" btree (type)
    "index_services_on_type_id_when_active_and_project_id_not_null" btree (type, id) WHERE active = true AND project_id IS NOT NULL
Foreign-key constraints:
    "fk_71cce407f9" FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
    "fk_e8fe908a34" FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE
    "fk_services_inherit_from_id" FOREIGN KEY (inherit_from_id) REFERENCES services(id) ON DELETE CASCADE
Referenced by:
    TABLE "chat_names" CONSTRAINT "fk_00797a2bf9" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "web_hooks" CONSTRAINT "fk_d47999a98a" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE NOT VALID
    TABLE "open_project_tracker_data" CONSTRAINT "fk_rails_1987546e48" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "slack_integrations" CONSTRAINT "fk_rails_73db19721a" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "jira_tracker_data" CONSTRAINT "fk_rails_a299066916" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "alerts_service_data" CONSTRAINT "fk_rails_b93215a42c" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "issue_tracker_data" CONSTRAINT "fk_rails_ccc0840427" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "services" CONSTRAINT "fk_services_inherit_from_id" FOREIGN KEY (inherit_from_id) REFERENCES services(id) ON DELETE CASCADE
Triggers:
    trigger_has_external_issue_tracker_on_delete AFTER DELETE ON services FOR EACH ROW WHEN (old.category::text = 'issue_tracker'::text AND old.active = true AND old.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_issue_tracker()
    trigger_has_external_issue_tracker_on_insert AFTER INSERT ON services FOR EACH ROW WHEN (new.category::text = 'issue_tracker'::text AND new.active = true AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_issue_tracker()
    trigger_has_external_issue_tracker_on_update AFTER UPDATE ON services FOR EACH ROW WHEN (new.category::text = 'issue_tracker'::text AND old.active <> new.active AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_issue_tracker()
    trigger_has_external_wiki_on_delete AFTER DELETE ON services FOR EACH ROW WHEN (old.type::text = 'ExternalWikiService'::text AND old.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_wiki()
    trigger_has_external_wiki_on_insert AFTER INSERT ON services FOR EACH ROW WHEN (new.active = true AND new.type::text = 'ExternalWikiService'::text AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_wiki()
    trigger_has_external_wiki_on_update AFTER UPDATE ON services FOR EACH ROW WHEN (new.type::text = 'ExternalWikiService'::text AND old.active <> new.active AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_wiki()
$ rails db:migrate
== 20210205213915 RemoveForeignKeysFromAlertsServiceData: migrating ===========
-- foreign_keys(:alerts_service_data)
   -> 0.0070s
-- remove_foreign_key(:alerts_service_data, {:column=>:service_id})
   -> 0.0215s
== 20210205213915 RemoveForeignKeysFromAlertsServiceData: migrated (0.0389s) ==

== 20210205213933 DropAlertsServiceData: migrating ============================
-- drop_table(:alerts_service_data)
   -> 0.0196s
== 20210205213933 DropAlertsServiceData: migrated (0.0211s) ===================

== 20210205214003 RemoveAlertsServiceRecordsAgain: migrating ==================
== 20210205214003 RemoveAlertsServiceRecordsAgain: migrated (0.0496s) =========
DB state - after all migrations
$ bin/rails dbconsole
psql (11.9)
Type "help" for help.

gitlabhq_development=# \d alerts_service_data
Did not find any relation named "alerts_service_data".
gitlabhq_development=# \d services
                                                Table "public.services"
           Column           |            Type             | Collation | Nullable |               Default                
----------------------------+-----------------------------+-----------+----------+--------------------------------------
 id                         | integer                     |           | not null | nextval('services_id_seq'::regclass)
 type                       | character varying           |           |          | 
 project_id                 | integer                     |           |          | 
 created_at                 | timestamp without time zone |           |          | 
 updated_at                 | timestamp without time zone |           |          | 
 active                     | boolean                     |           | not null | false
 properties                 | text                        |           |          | 
 push_events                | boolean                     |           |          | true
 issues_events              | boolean                     |           |          | true
 merge_requests_events      | boolean                     |           |          | true
 tag_push_events            | boolean                     |           |          | true
 note_events                | boolean                     |           | not null | true
 category                   | character varying           |           | not null | 'common'::character varying
 wiki_page_events           | boolean                     |           |          | true
 pipeline_events            | boolean                     |           | not null | false
 confidential_issues_events | boolean                     |           | not null | true
 commit_events              | boolean                     |           | not null | true
 job_events                 | boolean                     |           | not null | false
 confidential_note_events   | boolean                     |           |          | true
 deployment_events          | boolean                     |           | not null | false
 comment_on_event_enabled   | boolean                     |           | not null | true
 template                   | boolean                     |           |          | false
 instance                   | boolean                     |           | not null | false
 comment_detail             | smallint                    |           |          | 
 inherit_from_id            | bigint                      |           |          | 
 alert_events               | boolean                     |           |          | 
 group_id                   | bigint                      |           |          | 
Indexes:
    "services_pkey" PRIMARY KEY, btree (id)
    "index_services_on_project_id_and_type_unique" UNIQUE, btree (project_id, type)
    "index_services_on_type_and_instance_partial" UNIQUE, btree (type, instance) WHERE instance = true
    "index_services_on_type_and_template_partial" UNIQUE, btree (type, template) WHERE template = true
    "index_services_on_unique_group_id_and_type" UNIQUE, btree (group_id, type)
    "index_services_on_inherit_from_id" btree (inherit_from_id)
    "index_services_on_template" btree (template)
    "index_services_on_type" btree (type)
    "index_services_on_type_id_when_active_and_project_id_not_null" btree (type, id) WHERE active = true AND project_id IS NOT NULL
Foreign-key constraints:
    "fk_71cce407f9" FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
    "fk_e8fe908a34" FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE
    "fk_services_inherit_from_id" FOREIGN KEY (inherit_from_id) REFERENCES services(id) ON DELETE CASCADE
Referenced by:
    TABLE "chat_names" CONSTRAINT "fk_00797a2bf9" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "web_hooks" CONSTRAINT "fk_d47999a98a" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE NOT VALID
    TABLE "open_project_tracker_data" CONSTRAINT "fk_rails_1987546e48" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "slack_integrations" CONSTRAINT "fk_rails_73db19721a" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "jira_tracker_data" CONSTRAINT "fk_rails_a299066916" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "issue_tracker_data" CONSTRAINT "fk_rails_ccc0840427" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "services" CONSTRAINT "fk_services_inherit_from_id" FOREIGN KEY (inherit_from_id) REFERENCES services(id) ON DELETE CASCADE
Triggers:
    trigger_has_external_issue_tracker_on_delete AFTER DELETE ON services FOR EACH ROW WHEN (old.category::text = 'issue_tracker'::text AND old.active = true AND old.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_issue_tracker()
    trigger_has_external_issue_tracker_on_insert AFTER INSERT ON services FOR EACH ROW WHEN (new.category::text = 'issue_tracker'::text AND new.active = true AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_issue_tracker()
    trigger_has_external_issue_tracker_on_update AFTER UPDATE ON services FOR EACH ROW WHEN (new.category::text = 'issue_tracker'::text AND old.active <> new.active AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_issue_tracker()
    trigger_has_external_wiki_on_delete AFTER DELETE ON services FOR EACH ROW WHEN (old.type::text = 'ExternalWikiService'::text AND old.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_wiki()
    trigger_has_external_wiki_on_insert AFTER INSERT ON services FOR EACH ROW WHEN (new.active = true AND new.type::text = 'ExternalWikiService'::text AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_wiki()
    trigger_has_external_wiki_on_update AFTER UPDATE ON services FOR EACH ROW WHEN (new.type::text = 'ExternalWikiService'::text AND old.active <> new.active AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_wiki()

Down

$ bin/rails db:migrate:down VERSION=20210205214003
== 20210205214003 RemoveAlertsServiceRecordsAgain: reverting ==================
== 20210205214003 RemoveAlertsServiceRecordsAgain: reverted (0.0000s) =========
$ bin/rails db:migrate:down VERSION=20210205213933
== 20210205213933 DropAlertsServiceData: reverting ============================
-- create_table(:alerts_service_data)
   -> 0.0208s
== 20210205213933 DropAlertsServiceData: reverted (0.0286s) ===================
DB state - after rolling back the table-dropping migration
$ bin/rails dbconsole
psql (11.9)
Type "help" for help.

gitlabhq_development=# \d alerts_service_data
                                           Table "public.alerts_service_data"
       Column       |           Type           | Collation | Nullable |                     Default                     
--------------------+--------------------------+-----------+----------+-------------------------------------------------
 id                 | bigint                   |           | not null | nextval('alerts_service_data_id_seq'::regclass)
 service_id         | bigint                   |           | not null | 
 created_at         | timestamp with time zone |           | not null | 
 updated_at         | timestamp with time zone |           | not null | 
 encrypted_token    | character varying(255)   |           |          | 
 encrypted_token_iv | character varying(255)   |           |          | 
Indexes:
    "alerts_service_data_pkey" PRIMARY KEY, btree (id)

gitlabhq_development=# \d services
                                                Table "public.services"
           Column           |            Type             | Collation | Nullable |               Default                
----------------------------+-----------------------------+-----------+----------+--------------------------------------
 id                         | integer                     |           | not null | nextval('services_id_seq'::regclass)
 type                       | character varying           |           |          | 
 project_id                 | integer                     |           |          | 
 created_at                 | timestamp without time zone |           |          | 
 updated_at                 | timestamp without time zone |           |          | 
 active                     | boolean                     |           | not null | false
 properties                 | text                        |           |          | 
 push_events                | boolean                     |           |          | true
 issues_events              | boolean                     |           |          | true
 merge_requests_events      | boolean                     |           |          | true
 tag_push_events            | boolean                     |           |          | true
 note_events                | boolean                     |           | not null | true
 category                   | character varying           |           | not null | 'common'::character varying
 wiki_page_events           | boolean                     |           |          | true
 pipeline_events            | boolean                     |           | not null | false
 confidential_issues_events | boolean                     |           | not null | true
 commit_events              | boolean                     |           | not null | true
 job_events                 | boolean                     |           | not null | false
 confidential_note_events   | boolean                     |           |          | true
 deployment_events          | boolean                     |           | not null | false
 comment_on_event_enabled   | boolean                     |           | not null | true
 template                   | boolean                     |           |          | false
 instance                   | boolean                     |           | not null | false
 comment_detail             | smallint                    |           |          | 
 inherit_from_id            | bigint                      |           |          | 
 alert_events               | boolean                     |           |          | 
 group_id                   | bigint                      |           |          | 
Indexes:
    "services_pkey" PRIMARY KEY, btree (id)
    "index_services_on_project_id_and_type_unique" UNIQUE, btree (project_id, type)
    "index_services_on_type_and_instance_partial" UNIQUE, btree (type, instance) WHERE instance = true
    "index_services_on_type_and_template_partial" UNIQUE, btree (type, template) WHERE template = true
    "index_services_on_unique_group_id_and_type" UNIQUE, btree (group_id, type)
    "index_services_on_inherit_from_id" btree (inherit_from_id)
    "index_services_on_template" btree (template)
    "index_services_on_type" btree (type)
    "index_services_on_type_id_when_active_and_project_id_not_null" btree (type, id) WHERE active = true AND project_id IS NOT NULL
Foreign-key constraints:
    "fk_71cce407f9" FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
    "fk_e8fe908a34" FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE
    "fk_services_inherit_from_id" FOREIGN KEY (inherit_from_id) REFERENCES services(id) ON DELETE CASCADE
Referenced by:
    TABLE "chat_names" CONSTRAINT "fk_00797a2bf9" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "web_hooks" CONSTRAINT "fk_d47999a98a" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE NOT VALID
    TABLE "open_project_tracker_data" CONSTRAINT "fk_rails_1987546e48" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "slack_integrations" CONSTRAINT "fk_rails_73db19721a" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "jira_tracker_data" CONSTRAINT "fk_rails_a299066916" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "issue_tracker_data" CONSTRAINT "fk_rails_ccc0840427" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "services" CONSTRAINT "fk_services_inherit_from_id" FOREIGN KEY (inherit_from_id) REFERENCES services(id) ON DELETE CASCADE
Triggers:
    trigger_has_external_issue_tracker_on_delete AFTER DELETE ON services FOR EACH ROW WHEN (old.category::text = 'issue_tracker'::text AND old.active = true AND old.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_issue_tracker()
    trigger_has_external_issue_tracker_on_insert AFTER INSERT ON services FOR EACH ROW WHEN (new.category::text = 'issue_tracker'::text AND new.active = true AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_issue_tracker()
    trigger_has_external_issue_tracker_on_update AFTER UPDATE ON services FOR EACH ROW WHEN (new.category::text = 'issue_tracker'::text AND old.active <> new.active AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_issue_tracker()
    trigger_has_external_wiki_on_delete AFTER DELETE ON services FOR EACH ROW WHEN (old.type::text = 'ExternalWikiService'::text AND old.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_wiki()
    trigger_has_external_wiki_on_insert AFTER INSERT ON services FOR EACH ROW WHEN (new.active = true AND new.type::text = 'ExternalWikiService'::text AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_wiki()
    trigger_has_external_wiki_on_update AFTER UPDATE ON services FOR EACH ROW WHEN (new.type::text = 'ExternalWikiService'::text AND old.active <> new.active AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_wiki()
$ bin/rails db:migrate:down VERSION=20210205213915
== 20210205213915 RemoveForeignKeysFromAlertsServiceData: reverting ===========
-- add_foreign_key(:alerts_service_data, :services, {:column=>:service_id, :on_delete=>:cascade})
   -> 0.0046s
== 20210205213915 RemoveForeignKeysFromAlertsServiceData: reverted (0.0101s) ==
DB state - after rolling back the foreign key migration
$ bin/rails dbconsole
psql (11.9)
Type "help" for help.

gitlabhq_development=# \d alerts_service_data
                                           Table "public.alerts_service_data"
       Column       |           Type           | Collation | Nullable |                     Default                     
--------------------+--------------------------+-----------+----------+-------------------------------------------------
 id                 | bigint                   |           | not null | nextval('alerts_service_data_id_seq'::regclass)
 service_id         | bigint                   |           | not null | 
 created_at         | timestamp with time zone |           | not null | 
 updated_at         | timestamp with time zone |           | not null | 
 encrypted_token    | character varying(255)   |           |          | 
 encrypted_token_iv | character varying(255)   |           |          | 
Indexes:
    "alerts_service_data_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
    "fk_rails_b93215a42c" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE

gitlabhq_development=# \d services
                                                Table "public.services"
           Column           |            Type             | Collation | Nullable |               Default                
----------------------------+-----------------------------+-----------+----------+--------------------------------------
 id                         | integer                     |           | not null | nextval('services_id_seq'::regclass)
 type                       | character varying           |           |          | 
 project_id                 | integer                     |           |          | 
 created_at                 | timestamp without time zone |           |          | 
 updated_at                 | timestamp without time zone |           |          | 
 active                     | boolean                     |           | not null | false
 properties                 | text                        |           |          | 
 push_events                | boolean                     |           |          | true
 issues_events              | boolean                     |           |          | true
 merge_requests_events      | boolean                     |           |          | true
 tag_push_events            | boolean                     |           |          | true
 note_events                | boolean                     |           | not null | true
 category                   | character varying           |           | not null | 'common'::character varying
 wiki_page_events           | boolean                     |           |          | true
 pipeline_events            | boolean                     |           | not null | false
 confidential_issues_events | boolean                     |           | not null | true
 commit_events              | boolean                     |           | not null | true
 job_events                 | boolean                     |           | not null | false
 confidential_note_events   | boolean                     |           |          | true
 deployment_events          | boolean                     |           | not null | false
 comment_on_event_enabled   | boolean                     |           | not null | true
 template                   | boolean                     |           |          | false
 instance                   | boolean                     |           | not null | false
 comment_detail             | smallint                    |           |          | 
 inherit_from_id            | bigint                      |           |          | 
 alert_events               | boolean                     |           |          | 
 group_id                   | bigint                      |           |          | 
Indexes:
    "services_pkey" PRIMARY KEY, btree (id)
    "index_services_on_project_id_and_type_unique" UNIQUE, btree (project_id, type)
    "index_services_on_type_and_instance_partial" UNIQUE, btree (type, instance) WHERE instance = true
    "index_services_on_type_and_template_partial" UNIQUE, btree (type, template) WHERE template = true
    "index_services_on_unique_group_id_and_type" UNIQUE, btree (group_id, type)
    "index_services_on_inherit_from_id" btree (inherit_from_id)
    "index_services_on_template" btree (template)
    "index_services_on_type" btree (type)
    "index_services_on_type_id_when_active_and_project_id_not_null" btree (type, id) WHERE active = true AND project_id IS NOT NULL
Foreign-key constraints:
    "fk_71cce407f9" FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
    "fk_e8fe908a34" FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE
    "fk_services_inherit_from_id" FOREIGN KEY (inherit_from_id) REFERENCES services(id) ON DELETE CASCADE
Referenced by:
    TABLE "chat_names" CONSTRAINT "fk_00797a2bf9" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "web_hooks" CONSTRAINT "fk_d47999a98a" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE NOT VALID
    TABLE "open_project_tracker_data" CONSTRAINT "fk_rails_1987546e48" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "slack_integrations" CONSTRAINT "fk_rails_73db19721a" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "jira_tracker_data" CONSTRAINT "fk_rails_a299066916" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "alerts_service_data" CONSTRAINT "fk_rails_b93215a42c" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "issue_tracker_data" CONSTRAINT "fk_rails_ccc0840427" FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
    TABLE "services" CONSTRAINT "fk_services_inherit_from_id" FOREIGN KEY (inherit_from_id) REFERENCES services(id) ON DELETE CASCADE
Triggers:
    trigger_has_external_issue_tracker_on_delete AFTER DELETE ON services FOR EACH ROW WHEN (old.category::text = 'issue_tracker'::text AND old.active = true AND old.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_issue_tracker()
    trigger_has_external_issue_tracker_on_insert AFTER INSERT ON services FOR EACH ROW WHEN (new.category::text = 'issue_tracker'::text AND new.active = true AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_issue_tracker()
    trigger_has_external_issue_tracker_on_update AFTER UPDATE ON services FOR EACH ROW WHEN (new.category::text = 'issue_tracker'::text AND old.active <> new.active AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_issue_tracker()
    trigger_has_external_wiki_on_delete AFTER DELETE ON services FOR EACH ROW WHEN (old.type::text = 'ExternalWikiService'::text AND old.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_wiki()
    trigger_has_external_wiki_on_insert AFTER INSERT ON services FOR EACH ROW WHEN (new.active = true AND new.type::text = 'ExternalWikiService'::text AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_wiki()
    trigger_has_external_wiki_on_update AFTER UPDATE ON services FOR EACH ROW WHEN (new.type::text = 'ExternalWikiService'::text AND old.active <> new.active AND new.project_id IS NOT NULL) EXECUTE PROCEDURE set_has_external_wiki()

Screenshots (strongly suggested)

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team
Edited by Sarah Yasonik

Merge request reports