summaryrefslogtreecommitdiff
path: root/app/services/issues
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2018-08-16 13:23:02 +0100
committerSean McGivern <sean@gitlab.com>2018-08-21 12:45:05 +0100
commitfd072f7df71257e694a1d82525c4237ed9cef927 (patch)
treed3973ceb80fac6aac4369c608957ca2698a2a1e8 /app/services/issues
parent2017c5c62abde0d6f24e3afc120365ee1aaaca4b (diff)
downloadgitlab-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.rb12
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)