Skip to content
代码片段 群组 项目
提交 09e7e179 编辑于 作者: Dmitry Gruzd's avatar Dmitry Gruzd
浏览文件

Merge branch 'tchu-fix-n+1-for-notes-search' into 'master'

Fix N+1 for global/group notes search

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113770



Merged-by: default avatarDmitry Gruzd <dgruzd@gitlab.com>
Approved-by: default avatarRavi Kumar <rkumar@gitlab.com>
Approved-by: default avatarDmitry Gruzd <dgruzd@gitlab.com>
Co-authored-by: default avatarTerri Chu <tchu@gitlab.com>
No related branches found
No related tags found
无相关合并请求
......@@ -172,7 +172,6 @@ class Note < ApplicationRecord
project: [:project_members, :namespace, { group: [:group_members] }])
end
scope :with_metadata, -> { includes(:system_note_metadata) }
scope :with_web_entity_associations, -> { preload(:project, :author, :noteable) }
scope :for_note_or_capitalized_note, ->(text) { where(note: [text, text.capitalize]) }
scope :like_note_or_capitalized_note, ->(text) { where('(note LIKE ? OR note LIKE ?)', text, text.capitalize) }
......@@ -291,6 +290,10 @@ def simple_sorts
def cherry_picked_merge_requests(shas)
where(noteable_type: 'MergeRequest', commit_id: shas).select(:noteable_id)
end
def with_web_entity_associations
preload(:project, :author, :noteable)
end
end
# rubocop: disable CodeReuse/ServiceClass
......
......@@ -19,10 +19,17 @@ module Note
end
class_methods do
# override
extend ::Gitlab::Utils::Override
override :use_separate_indices?
def use_separate_indices?
true
end
override :with_web_entity_associations
def with_web_entity_associations
super.preload(project: [:group, { namespace: :route }])
end
end
# Original method in Elastic::ApplicationSearch
......
......@@ -48,8 +48,8 @@ def send_search_request(params)
context 'for issues scope' do
let(:object) { :issue }
let(:creation_args) { { project: project } }
let(:params) { { search: '*', scope: 'issues' } }
let(:creation_args) { { project: project, title: 'foo' } }
let(:params) { { search: 'foo', scope: 'issues' } }
# some N+1 queries still exist
# each issue runs an extra query for project routes
let(:threshold) { 4 }
......@@ -60,8 +60,8 @@ def send_search_request(params)
context 'for merge_request scope' do
let(:creation_traits) { [:unique_branches] }
let(:object) { :merge_request }
let(:creation_args) { { source_project: project } }
let(:params) { { search: '*', scope: 'merge_requests' } }
let(:creation_args) { { source_project: project, title: 'foo' } }
let(:params) { { search: 'foo', scope: 'merge_requests' } }
# some N+1 queries still exist
# each merge request runs an extra query for project routes
let(:threshold) { 4 }
......@@ -72,8 +72,8 @@ def send_search_request(params)
context 'for project scope' do
let(:creation_traits) { [:public] }
let(:object) { :project }
let(:creation_args) { {} }
let(:params) { { search: '*', scope: 'projects' } }
let(:creation_args) { { name: 'foo' } }
let(:params) { { search: 'foo', scope: 'projects' } }
# some N+1 queries still exist
# each project requires 3 extra queries
# - one count for forks
......@@ -90,11 +90,9 @@ def send_search_request(params)
context 'for notes scope' do
let(:creation_traits) { [:on_commit] }
let(:object) { :note }
let(:creation_args) { { project: project } }
let(:params) { { search: '*', scope: 'notes' } }
# some N+1 still exist
# each project makes and extra call to get the namespace routes
let(:threshold) { 6 }
let(:creation_args) { { project: project, note: 'foo' } }
let(:params) { { search: 'foo', scope: 'notes' } }
let(:threshold) { 0 }
it_behaves_like 'an efficient database result'
end
......@@ -102,7 +100,7 @@ def send_search_request(params)
context 'for milestones scope' do
let(:object) { :milestone }
let(:creation_args) { { project: project } }
let(:params) { { search: '*', scope: 'milestones' } }
let(:params) { { search: 'title', scope: 'milestones' } }
let(:threshold) { 0 }
it_behaves_like 'an efficient database result'
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册