Don't use ProjectsFinder in TodosFinder

Using ProjectsFinder in TodosFinder to limit todos to the right projects
leads to overly complicated and slow database queries. This commit
removes the use of ProjectsFinder in favour of using
Project.public_or_visible_to_current_user directly.

Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/43767
This commit is contained in:
Yorick Peterse 2018-03-01 17:16:39 +01:00
parent de454de9b1
commit f09fe848da
No known key found for this signature in database
GPG key ID: EDD30D2BEB691AC9
2 changed files with 11 additions and 9 deletions

View file

@ -110,10 +110,6 @@ class TodosFinder
ids ids
end end
def projects(items)
ProjectsFinder.new(current_user: current_user, project_ids_relation: project_ids(items)).execute
end
def type? def type?
type.present? && %w(Issue MergeRequest).include?(type) type.present? && %w(Issue MergeRequest).include?(type)
end end
@ -152,13 +148,14 @@ class TodosFinder
def by_project(items) def by_project(items)
if project? if project?
items = items.where(project: project) items.where(project: project)
else else
item_projects = projects(items) projects = Project
items = items.merge(item_projects).joins(:project) .public_or_visible_to_user(current_user)
end .order_id_desc
items items.joins(:project).merge(projects)
end
end end
def by_state(items) def by_state(items)

View file

@ -0,0 +1,5 @@
---
title: Don't use ProjectsFinder in TodosFinder
merge_request:
author:
type: performance