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:
parent
de454de9b1
commit
f09fe848da
2 changed files with 11 additions and 9 deletions
|
@ -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)
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Don't use ProjectsFinder in TodosFinder
|
||||||
|
merge_request:
|
||||||
|
author:
|
||||||
|
type: performance
|
Loading…
Reference in a new issue