Merge branch 'sh-fix-pipeline-jobs-nplus-one' into 'master'
Eliminate N+1 queries for CI job artifacts in /api/projects/:id/pipelines/:pipeline_id/jobs See merge request gitlab-org/gitlab-ce!19353
This commit is contained in:
commit
7adfc4249c
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Eliminate N+1 queries for CI job artifacts in /api/prjoects/:id/pipelines/:pipeline_id/jobs
|
||||
merge_request:
|
||||
author:
|
||||
type: performance
|
|
@ -54,6 +54,7 @@ module API
|
|||
pipeline = user_project.pipelines.find(params[:pipeline_id])
|
||||
builds = pipeline.builds
|
||||
builds = filter_builds(builds, params[:scope])
|
||||
builds = builds.preload(:job_artifacts_archive)
|
||||
|
||||
present paginate(builds), with: Entities::Job
|
||||
end
|
||||
|
|
|
@ -177,6 +177,18 @@ describe API::Jobs do
|
|||
json_response.each { |job| expect(job['pipeline']['id']).to eq(pipeline.id) }
|
||||
end
|
||||
end
|
||||
|
||||
it 'avoids N+1 queries' do
|
||||
control_count = ActiveRecord::QueryRecorder.new(skip_cached: false) do
|
||||
get api("/projects/#{project.id}/pipelines/#{pipeline.id}/jobs", api_user), query
|
||||
end.count
|
||||
|
||||
3.times { create(:ci_build, :artifacts, pipeline: pipeline) }
|
||||
|
||||
expect do
|
||||
get api("/projects/#{project.id}/pipelines/#{pipeline.id}/jobs", api_user), query
|
||||
end.not_to exceed_all_query_limit(control_count)
|
||||
end
|
||||
end
|
||||
|
||||
context 'unauthorized user' do
|
||||
|
|
Loading…
Reference in New Issue