summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2017-05-29 16:07:57 -0500
committerDouwe Maan <douwe@selenight.nl>2017-05-29 16:08:05 -0500
commite53169c9702f1f4f25f8f1e91ed9ab7ace0a3d41 (patch)
tree6a051e9da6794f0fc70fcf0dca018236dfb3dc30
parent1ac12698c613774bdace72475573916c142a07e4 (diff)
downloadgitlab-ce-e53169c9702f1f4f25f8f1e91ed9ab7ace0a3d41.tar.gz
Resolve N+1 query issue with discussions
-rw-r--r--app/models/concerns/noteable.rb7
-rw-r--r--app/models/discussion.rb3
-rw-r--r--changelogs/unreleased/dm-discussions-n-plus-1.yml4
3 files changed, 12 insertions, 2 deletions
diff --git a/app/models/concerns/noteable.rb b/app/models/concerns/noteable.rb
index dd1e6630642..c7bdc997eca 100644
--- a/app/models/concerns/noteable.rb
+++ b/app/models/concerns/noteable.rb
@@ -43,7 +43,12 @@ module Noteable
end
def resolvable_discussions
- @resolvable_discussions ||= discussion_notes.resolvable.discussions(self)
+ @resolvable_discussions ||=
+ if defined?(@discussions)
+ @discussions.select(&:resolvable?)
+ else
+ discussion_notes.resolvable.discussions(self)
+ end
end
def discussions_resolvable?
diff --git a/app/models/discussion.rb b/app/models/discussion.rb
index 0b6b920ed66..6a92b8eef66 100644
--- a/app/models/discussion.rb
+++ b/app/models/discussion.rb
@@ -21,7 +21,8 @@ class Discussion
end
def self.build_collection(notes, context_noteable = nil)
- notes.group_by { |n| n.discussion_id(context_noteable) }.values.map { |notes| build(notes, context_noteable) }
+ grouped_notes = notes.includes(:noteable).group_by { |n| n.discussion_id(context_noteable) }
+ grouped_notes.values.map { |notes| build(notes, context_noteable) }
end
# Returns an alphanumeric discussion ID based on `build_discussion_id`
diff --git a/changelogs/unreleased/dm-discussions-n-plus-1.yml b/changelogs/unreleased/dm-discussions-n-plus-1.yml
new file mode 100644
index 00000000000..b97e4344248
--- /dev/null
+++ b/changelogs/unreleased/dm-discussions-n-plus-1.yml
@@ -0,0 +1,4 @@
+---
+title: Resolve N+1 query issue with discussions
+merge_request:
+author: