PropagateServiceTemplate for services with data tables
What does this MR do?
Updating a service template performs an asynchronous creation of project services using PropagateServiceTemplate
.
This propagation works fine except for those services that also have a separate table to store some fields data like issue_tracker_data
, jira_tracker_data
and open_project_tracker_data
at the moment, see: https://gitlab.com/gitlab-org/gitlab/-/blob/v12.10.0-rc20200415152739-ee/app/models/project_services/data_fields.rb#L45-47
This commit extends the propagation to also cover the services with separate tables.
It also uses exec_query
instead of execute
which depending on the
database connector can be more memory efficient. https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#method-i-execute
database This propagation can create a potentially large number of records (update one service template, could create a service for each project of the GitLab instance).
We are doing:
- Find project IDs
- For each 100 (within a transaction):
INSERT INTO services ...
-
INSERT INTO *_tracker_data ...
(Only ifdata_fields_present?
) -
UPDATE projects SET has_external_issue_tracker
(Only ifactive_external_issue_tracker?
) -
UPDATE projects SET has_external_wiki
(Only ifactive_external_wiki?
)
Closes #214834 (closed)