diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2018-03-01 17:16:39 +0100 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2018-03-02 14:53:38 +0100 |
commit | f09fe848da02189a3dafe2d532fefb1379eacac4 (patch) | |
tree | 354308e1803370dc3e4cbe52078cd8b670cacbed | |
parent | de454de9b10f0dd534884c8ffeabe3e534993349 (diff) | |
download | gitlab-ce-remove-projects-finder-from-todos-finder.tar.gz |
Don't use ProjectsFinder in TodosFinderremove-projects-finder-from-todos-finder
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
-rw-r--r-- | app/finders/todos_finder.rb | 15 | ||||
-rw-r--r-- | changelogs/unreleased/remove-projects-finder-from-todos-finder.yml | 5 |
2 files changed, 11 insertions, 9 deletions
diff --git a/app/finders/todos_finder.rb b/app/finders/todos_finder.rb index edb17843002..47c8b9b60ed 100644 --- a/app/finders/todos_finder.rb +++ b/app/finders/todos_finder.rb @@ -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) diff --git a/changelogs/unreleased/remove-projects-finder-from-todos-finder.yml b/changelogs/unreleased/remove-projects-finder-from-todos-finder.yml new file mode 100644 index 00000000000..0a3fc751edb --- /dev/null +++ b/changelogs/unreleased/remove-projects-finder-from-todos-finder.yml @@ -0,0 +1,5 @@ +--- +title: Don't use ProjectsFinder in TodosFinder +merge_request: +author: +type: performance |