Commit 10d421be authored by Douwe Maan's avatar Douwe Maan

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
parents 46b881de f9e21787
---
title: Eliminate N+1 queries in /api/groups/:id
merge_request: 24513
author:
type: performance
...@@ -344,19 +344,23 @@ module API ...@@ -344,19 +344,23 @@ module API
class GroupDetail < Group class GroupDetail < Group
expose :projects, using: Entities::Project do |group, options| expose :projects, using: Entities::Project do |group, options|
GroupProjectsFinder.new( projects = GroupProjectsFinder.new(
group: group, group: group,
current_user: options[:current_user], current_user: options[:current_user],
options: { only_owned: true } options: { only_owned: true }
).execute ).execute
Entities::Project.prepare_relation(projects)
end end
expose :shared_projects, using: Entities::Project do |group, options| expose :shared_projects, using: Entities::Project do |group, options|
GroupProjectsFinder.new( projects = GroupProjectsFinder.new(
group: group, group: group,
current_user: options[:current_user], current_user: options[:current_user],
options: { only_shared: true } options: { only_shared: true }
).execute ).execute
Entities::Project.prepare_relation(projects)
end end
end end
......
...@@ -382,6 +382,20 @@ describe API::Groups do ...@@ -382,6 +382,20 @@ describe API::Groups do
expect(response_project_ids(json_response, 'shared_projects')) expect(response_project_ids(json_response, 'shared_projects'))
.to contain_exactly(projects[:public].id, projects[:internal].id) .to contain_exactly(projects[:public].id, projects[:internal].id)
end 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 end
context "when authenticated as admin" do context "when authenticated as admin" do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment