Merge branch 'sh-project-feature-nplus-one' into 'master'
Remove N+1 SQL query loading project feature in dashboard Closes #66482 See merge request gitlab-org/gitlab-ce!32169
This commit is contained in:
commit
f91b5d5840
3 changed files with 28 additions and 0 deletions
|
@ -70,6 +70,7 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
|
|||
.new(params: finder_params, current_user: current_user)
|
||||
.execute
|
||||
.includes(:route, :creator, :group, namespace: [:route, :owner])
|
||||
.preload(:project_feature)
|
||||
.page(finder_params[:page])
|
||||
|
||||
prepare_projects_for_rendering(projects)
|
||||
|
|
5
changelogs/unreleased/sh-project-feature-nplus-one.yml
Normal file
5
changelogs/unreleased/sh-project-feature-nplus-one.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Remove N+1 SQL query loading project feature in dashboard
|
||||
merge_request: 32169
|
||||
author:
|
||||
type: performance
|
|
@ -220,4 +220,26 @@ describe 'Dashboard Projects' do
|
|||
expect(find('input#merge_request_target_branch', visible: false).value).to eq 'master'
|
||||
end
|
||||
end
|
||||
|
||||
it 'avoids an N+1 query in dashboard index' do
|
||||
create(:ci_pipeline, :with_job, status: :success, project: project, ref: project.default_branch, sha: project.commit.sha)
|
||||
visit dashboard_projects_path
|
||||
|
||||
control_count = ActiveRecord::QueryRecorder.new { visit dashboard_projects_path }.count
|
||||
|
||||
new_project = create(:project, :repository, name: 'new project')
|
||||
create(:ci_pipeline, :with_job, status: :success, project: new_project, ref: new_project.commit.sha)
|
||||
new_project.add_developer(user)
|
||||
|
||||
ActiveRecord::QueryRecorder.new { visit dashboard_projects_path }.count
|
||||
|
||||
# There are three known N+1 queries:
|
||||
# 1. Project#open_issues_count
|
||||
# 2. Project#open_merge_requests_count
|
||||
# 3. Project#forks_count
|
||||
#
|
||||
# In addition, ProjectsHelper#load_pipeline_status also adds an
|
||||
# additional query.
|
||||
expect { visit dashboard_projects_path }.not_to exceed_query_limit(control_count + 4)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue