Merge branch 'sh-preload-associations-for-group-api' into 'master'
Eliminate N+1 queries in /api/groups/:id Closes #49845 See merge request gitlab-org/gitlab-ce!24513
This commit is contained in:
commit
10d421be3f
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Eliminate N+1 queries in /api/groups/:id
|
||||
merge_request: 24513
|
||||
author:
|
||||
type: performance
|
|
@ -344,19 +344,23 @@ module API
|
|||
|
||||
class GroupDetail < Group
|
||||
expose :projects, using: Entities::Project do |group, options|
|
||||
GroupProjectsFinder.new(
|
||||
projects = GroupProjectsFinder.new(
|
||||
group: group,
|
||||
current_user: options[:current_user],
|
||||
options: { only_owned: true }
|
||||
).execute
|
||||
|
||||
Entities::Project.prepare_relation(projects)
|
||||
end
|
||||
|
||||
expose :shared_projects, using: Entities::Project do |group, options|
|
||||
GroupProjectsFinder.new(
|
||||
projects = GroupProjectsFinder.new(
|
||||
group: group,
|
||||
current_user: options[:current_user],
|
||||
options: { only_shared: true }
|
||||
).execute
|
||||
|
||||
Entities::Project.prepare_relation(projects)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -382,6 +382,20 @@ describe API::Groups do
|
|||
expect(response_project_ids(json_response, 'shared_projects'))
|
||||
.to contain_exactly(projects[:public].id, projects[:internal].id)
|
||||
end
|
||||
|
||||
it 'avoids N+1 queries' do
|
||||
get api("/groups/#{group1.id}", admin)
|
||||
|
||||
control_count = ActiveRecord::QueryRecorder.new do
|
||||
get api("/groups/#{group1.id}", admin)
|
||||
end.count
|
||||
|
||||
create(:project, namespace: group1)
|
||||
|
||||
expect do
|
||||
get api("/groups/#{group1.id}", admin)
|
||||
end.not_to exceed_query_limit(control_count)
|
||||
end
|
||||
end
|
||||
|
||||
context "when authenticated as admin" do
|
||||
|
|
Loading…
Reference in New Issue