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
上级 de454de9
......@@ -110,10 +110,6 @@ class TodosFinder
ids
end
def projects(items)
ProjectsFinder.new(current_user: current_user, project_ids_relation: project_ids(items)).execute
end
def type?
type.present? && %w(Issue MergeRequest).include?(type)
end
......@@ -152,13 +148,14 @@ class TodosFinder
def by_project(items)
if project?
items = items.where(project: project)
items.where(project: project)
else
item_projects = projects(items)
items = items.merge(item_projects).joins(:project)
end
projects = Project
.public_or_visible_to_user(current_user)
.order_id_desc
items
items.joins(:project).merge(projects)
end
end
def by_state(items)
......
---
title: Don't use ProjectsFinder in TodosFinder
merge_request:
author:
type: performance
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册