diff options
author | Stan Hu <stanhu@gmail.com> | 2017-11-08 19:37:21 +0000 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2017-11-08 19:37:21 +0000 |
commit | 0c3877a48827b587b407174410196993bec79f73 (patch) | |
tree | e3ff6d6ab3e4988e4ecb9c170114278ffbcbe54a /lib | |
parent | 1d7e2a961aec86e50f3159ad3b82524e86b007c2 (diff) | |
parent | 4d4ddb6004e6f7f56b337a49c6eedaad70d70862 (diff) | |
download | gitlab-ce-0c3877a48827b587b407174410196993bec79f73.tar.gz |
Merge branch 'fix-issues-api-list-performance' into 'master'
Fail when issuable_meta_data is called on an unlimited collection
Closes #39845
See merge request gitlab-org/gitlab-ce!15249
Diffstat (limited to 'lib')
-rw-r--r-- | lib/api/issues.rb | 12 | ||||
-rw-r--r-- | lib/gitlab/issuable_metadata.rb | 8 |
2 files changed, 14 insertions, 6 deletions
diff --git a/lib/api/issues.rb b/lib/api/issues.rb index 0df41dcc903..74dfd9f96de 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -68,7 +68,7 @@ module API desc: 'Return issues for the given scope: `created-by-me`, `assigned-to-me` or `all`' end get do - issues = find_issues + issues = paginate(find_issues) options = { with: Entities::IssueBasic, @@ -76,7 +76,7 @@ module API issuable_metadata: issuable_meta_data(issues, 'Issue') } - present paginate(issues), options + present issues, options end end @@ -95,7 +95,7 @@ module API get ":id/issues" do group = find_group!(params[:id]) - issues = find_issues(group_id: group.id) + issues = paginate(find_issues(group_id: group.id)) options = { with: Entities::IssueBasic, @@ -103,7 +103,7 @@ module API issuable_metadata: issuable_meta_data(issues, 'Issue') } - present paginate(issues), options + present issues, options end end @@ -124,7 +124,7 @@ module API get ":id/issues" do project = find_project!(params[:id]) - issues = find_issues(project_id: project.id) + issues = paginate(find_issues(project_id: project.id)) options = { with: Entities::IssueBasic, @@ -133,7 +133,7 @@ module API issuable_metadata: issuable_meta_data(issues, 'Issue') } - present paginate(issues), options + present issues, options end desc 'Get a single project issue' do diff --git a/lib/gitlab/issuable_metadata.rb b/lib/gitlab/issuable_metadata.rb index 977c05910d3..0c9de72329c 100644 --- a/lib/gitlab/issuable_metadata.rb +++ b/lib/gitlab/issuable_metadata.rb @@ -1,6 +1,14 @@ module Gitlab module IssuableMetadata def issuable_meta_data(issuable_collection, collection_type) + # ActiveRecord uses Object#extend for null relations. + if !(issuable_collection.singleton_class < ActiveRecord::NullRelation) && + issuable_collection.respond_to?(:limit_value) && + issuable_collection.limit_value.nil? + + raise 'Collection must have a limit applied for preloading meta-data' + end + # map has to be used here since using pluck or select will # throw an error when ordering issuables by priority which inserts # a new order into the collection. |