Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
1bbfd61e
Commit
1bbfd61e
authored
Sep 13, 2017
by
micael.bergeron
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Port of !14198 to gitlab-ee
added Geo guard for relative positioning
parent
20ec88c7
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
31 additions
and
5 deletions
+31
-5
app/controllers/boards/issues_controller.rb
app/controllers/boards/issues_controller.rb
+9
-4
app/models/label.rb
app/models/label.rb
+6
-1
changelogs/unreleased/34510-board-issues-sql-speedup.yml
changelogs/unreleased/34510-board-issues-sql-speedup.yml
+5
-0
spec/controllers/boards/issues_controller_spec.rb
spec/controllers/boards/issues_controller_spec.rb
+11
-0
No files found.
app/controllers/boards/issues_controller.rb
View file @
1bbfd61e
...
...
@@ -13,9 +13,15 @@ module Boards
issues
=
Boards
::
Issues
::
ListService
.
new
(
board_parent
,
current_user
,
filter_params
).
execute
issues
=
issues
.
page
(
params
[
:page
]).
per
(
params
[
:per
]
||
20
)
make_sure_position_is_set
(
issues
)
unless
Gitlab
::
Geo
.
secondary?
issues
=
issues
.
preload
(
:project
,
:milestone
,
:assignees
,
labels:
[
:priorities
],
notes:
[
:award_emoji
,
:author
]
)
render
json:
{
issues:
serialize_as_json
(
issues
.
preload
(
:project
)
),
issues:
serialize_as_json
(
issues
),
size:
issues
.
total_count
}
end
...
...
@@ -78,14 +84,13 @@ module Boards
def
serialize_as_json
(
resource
)
resource
.
as_json
(
labels:
true
,
only:
[
:id
,
:iid
,
:project_id
,
:title
,
:confidential
,
:due_date
,
:relative_position
],
labels:
true
,
include:
{
project:
{
only:
[
:id
,
:path
]
},
assignees:
{
only:
[
:id
,
:name
,
:username
],
methods:
[
:avatar_url
]
},
milestone:
{
only:
[
:id
,
:title
]
}
},
user:
current_user
}
)
end
end
...
...
app/models/label.rb
View file @
1bbfd61e
...
...
@@ -130,7 +130,12 @@ class Label < ActiveRecord::Base
end
def
priority
(
project
)
priorities
.
find_by
(
project:
project
).
try
(
:priority
)
priority
=
if
priorities
.
loaded?
priorities
.
first
{
|
p
|
p
.
project
==
project
}
else
priorities
.
find_by
(
project:
project
)
end
priority
.
try
(
:priority
)
end
def
template?
...
...
changelogs/unreleased/34510-board-issues-sql-speedup.yml
0 → 100644
View file @
1bbfd61e
---
title
:
Optimize the boards' issues fetching.
merge_request
:
14198
author
:
type
:
other
spec/controllers/boards/issues_controller_spec.rb
View file @
1bbfd61e
...
...
@@ -45,6 +45,17 @@ describe Boards::IssuesController do
expect
(
parsed_response
.
length
).
to
eq
2
expect
(
development
.
issues
.
map
(
&
:relative_position
)).
not_to
include
(
nil
)
end
it
'avoids N+1 database queries'
do
create
(
:labeled_issue
,
project:
project
,
labels:
[
development
])
control_count
=
ActiveRecord
::
QueryRecorder
.
new
{
list_issues
(
user:
user
,
board:
board
,
list:
list2
)
}.
count
# 25 issues is bigger than the page size
# the relative position will ignore the `#make_sure_position_set` queries
create_list
(
:labeled_issue
,
25
,
project:
project
,
labels:
[
development
],
assignees:
[
johndoe
],
relative_position:
1
)
expect
{
list_issues
(
user:
user
,
board:
board
,
list:
list2
)
}.
not_to
exceed_query_limit
(
control_count
)
end
end
context
'with invalid list id'
do
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment