diff options
-rw-r--r-- | lib/banzai/reference_parser/merge_request_parser.rb | 5 | ||||
-rw-r--r-- | spec/services/issues/referenced_merge_requests_service_spec.rb | 13 |
2 files changed, 16 insertions, 2 deletions
diff --git a/lib/banzai/reference_parser/merge_request_parser.rb b/lib/banzai/reference_parser/merge_request_parser.rb index a370ff5b5b3..9e5d55f72bc 100644 --- a/lib/banzai/reference_parser/merge_request_parser.rb +++ b/lib/banzai/reference_parser/merge_request_parser.rb @@ -14,11 +14,12 @@ module Banzai # Eager loading these ensures we don't end up running dozens of # queries in this process. target_project: [ - { namespace: :owner }, + { namespace: [:owner, :route] }, { group: [:owners, :group_members] }, :invited_groups, :project_members, - :project_feature + :project_feature, + :route ] }), self.class.data_attribute diff --git a/spec/services/issues/referenced_merge_requests_service_spec.rb b/spec/services/issues/referenced_merge_requests_service_spec.rb index 0afc8c300f9..3349b97e688 100644 --- a/spec/services/issues/referenced_merge_requests_service_spec.rb +++ b/spec/services/issues/referenced_merge_requests_service_spec.rb @@ -35,6 +35,19 @@ describe Issues::ReferencedMergeRequestsService do expect(mrs).to eq([closing_mr, referencing_mr, closing_mr_other_project, referencing_mr_other_project]) expect(closed_by_mrs).to eq([closing_mr, closing_mr_other_project]) end + + context 'performance' do + it 'does not run extra queries when extra namespaces are included', :use_clean_rails_memory_store_caching do + service.execute(issue) # warm cache + control_count = ActiveRecord::QueryRecorder.new { service.execute(issue) }.count + + third_project = create(:project, :public) + create_closing_mr(source_project: third_project) + service.execute(issue) # warm cache + + expect { service.execute(issue) }.not_to exceed_query_limit(control_count) + end + end end describe '#referenced_merge_requests' do |