Fix performance problem of accessing tag list for projects api endpoints
This commit is contained in:
parent
67157de1e4
commit
1399eb058b
2 changed files with 16 additions and 4 deletions
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix performance problem of accessing tag list for projects api endpoints
|
||||
merge_request:
|
||||
author:
|
||||
type: performance
|
|
@ -135,10 +135,13 @@ module API
|
|||
expose :custom_attributes, using: 'API::Entities::CustomAttribute', if: :with_custom_attributes
|
||||
|
||||
def self.preload_relation(projects_relation, options = {})
|
||||
# Preloading tags, should be done with using only `:tags`,
|
||||
# as `:tags` are defined as: `has_many :tags, through: :taggings`
|
||||
# N+1 is solved then by using `subject.tags.map(&:name)`
|
||||
# MR describing the solution: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/20555
|
||||
projects_relation.preload(:project_feature, :route)
|
||||
.preload(:import_state)
|
||||
.preload(namespace: [:route, :owner],
|
||||
tags: :taggings)
|
||||
.preload(:import_state, :tags)
|
||||
.preload(namespace: [:route, :owner])
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -212,11 +215,15 @@ module API
|
|||
expose :statistics, using: 'API::Entities::ProjectStatistics', if: :statistics
|
||||
|
||||
def self.preload_relation(projects_relation, options = {})
|
||||
# Preloading tags, should be done with using only `:tags`,
|
||||
# as `:tags` are defined as: `has_many :tags, through: :taggings`
|
||||
# N+1 is solved then by using `subject.tags.map(&:name)`
|
||||
# MR describing the solution: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/20555
|
||||
super(projects_relation).preload(:group)
|
||||
.preload(project_group_links: :group,
|
||||
fork_network: :root_project,
|
||||
forked_project_link: :forked_from_project,
|
||||
forked_from_project: [:route, :forks, namespace: :route, tags: :taggings])
|
||||
forked_from_project: [:route, :forks, :tags, namespace: :route])
|
||||
end
|
||||
|
||||
def self.forks_counting_projects(projects_relation)
|
||||
|
|
Loading…
Reference in a new issue