diff options
author | Sean McGivern <sean@gitlab.com> | 2018-08-16 13:23:02 +0100 |
---|---|---|
committer | Sean McGivern <sean@gitlab.com> | 2018-08-21 12:45:05 +0100 |
commit | fd072f7df71257e694a1d82525c4237ed9cef927 (patch) | |
tree | d3973ceb80fac6aac4369c608957ca2698a2a1e8 /app/services/issues | |
parent | 2017c5c62abde0d6f24e3afc120365ee1aaaca4b (diff) | |
download | gitlab-ce-fd072f7df71257e694a1d82525c4237ed9cef927.tar.gz |
Fix CI pipelines N+1 in Issues::ReferencedMergeRequestsService
Whether the preloading belongs in the service or the controller is arguable,
here. As the service is only used for one controller action, it seems reasonable
to put it in the service, but that is not a definitive answer.
Adding the preloads for MR project routes here doesn't seem to work, perhaps
because of https://github.com/rails/rails/issues/32140.
Diffstat (limited to 'app/services/issues')
-rw-r--r-- | app/services/issues/referenced_merge_requests_service.rb | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/app/services/issues/referenced_merge_requests_service.rb b/app/services/issues/referenced_merge_requests_service.rb index 40375a0c861..c64ac806ac6 100644 --- a/app/services/issues/referenced_merge_requests_service.rb +++ b/app/services/issues/referenced_merge_requests_service.rb @@ -3,10 +3,14 @@ module Issues class ReferencedMergeRequestsService < Issues::BaseService def execute(issue) - [ - sort_by_iid(referenced_merge_requests(issue)), - sort_by_iid(closed_by_merge_requests(issue)) - ] + referenced = referenced_merge_requests(issue) + closed_by = closed_by_merge_requests(issue) + preloader = ActiveRecord::Associations::Preloader.new + + preloader.preload(referenced + closed_by, + head_pipeline: { project: [:route, { namespace: :route }] }) + + [sort_by_iid(referenced), sort_by_iid(closed_by)] end def referenced_merge_requests(issue) |