diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2017-08-22 14:12:08 +0200 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2017-08-22 16:02:40 +0200 |
commit | 6956b90594d45d3d7e87d69df7f4cd79237c323d (patch) | |
tree | 008221ae775d31fd633bc9140474f0aaafc91743 | |
parent | e6f20e52f6f77f77942c047dca91d3e325cce8b2 (diff) | |
download | gitlab-ce-issuables-pagination-without-count.tar.gz |
Use pagination without COUNT for issues/MRsissuables-pagination-without-count
This changes the pagination of issues and merge request index pages so
they don't use page numbers, instead only displaying a "Next" and
"Previous" button. This removes the need for a COUNT(*) query which on
GitLab.com can easily take up to 30 milliseconds.
A downside of this approach is that if you specify an offset that no
longer leads to data (e.g. because issues were closed) you won't be
redirected to the last valid page. This can't be done since this
functionality relies on us knowing the total number of pages, which in
turn requires a COUNT(*) query.
5 files changed, 9 insertions, 12 deletions
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 8893a514207..31a82af9f2a 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -25,13 +25,9 @@ class Projects::IssuesController < Projects::ApplicationController def index @collection_type = "Issue" @issues = issues_collection - @issues = @issues.page(params[:page]) + @issues = @issues.page(params[:page]).without_count @issuable_meta_data = issuable_meta_data(@issues, @collection_type) - if @issues.out_of_range? && @issues.total_pages != 0 - return redirect_to url_for(params.merge(page: @issues.total_pages, only_path: true)) - end - if params[:label_name].present? @labels = LabelsFinder.new(current_user, project_id: @project.id, title: params[:label_name]).execute end diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 2a3b73577a5..a80fbb624f7 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -15,14 +15,10 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo def index @collection_type = "MergeRequest" @merge_requests = merge_requests_collection - @merge_requests = @merge_requests.page(params[:page]) + @merge_requests = @merge_requests.page(params[:page]).without_count @merge_requests = @merge_requests.preload(merge_request_diff: :merge_request) @issuable_meta_data = issuable_meta_data(@merge_requests, @collection_type) - if @merge_requests.out_of_range? && @merge_requests.total_pages != 0 - return redirect_to url_for(params.merge(page: @merge_requests.total_pages, only_path: true)) - end - if params[:label_name].present? labels_params = { project_id: @project.id, title: params[:label_name] } @labels = LabelsFinder.new(current_user, labels_params).execute diff --git a/app/views/projects/issues/_issues.html.haml b/app/views/projects/issues/_issues.html.haml index 34d5a3e1831..0293bd8dd92 100644 --- a/app/views/projects/issues/_issues.html.haml +++ b/app/views/projects/issues/_issues.html.haml @@ -4,4 +4,4 @@ = render 'shared/empty_states/issues' - if @issues.present? - = paginate @issues, theme: "gitlab" + = paginate_collection(@issues) diff --git a/app/views/projects/merge_requests/_merge_requests.html.haml b/app/views/projects/merge_requests/_merge_requests.html.haml index 4e97f74dd6a..7aa9ab371db 100644 --- a/app/views/projects/merge_requests/_merge_requests.html.haml +++ b/app/views/projects/merge_requests/_merge_requests.html.haml @@ -5,4 +5,4 @@ = render 'shared/empty_states/merge_requests' - if @merge_requests.present? - = paginate @merge_requests, theme: "gitlab" + = paginate_collection(@merge_requests) diff --git a/changelogs/unreleased/issuables-pagination-without-count.yml b/changelogs/unreleased/issuables-pagination-without-count.yml new file mode 100644 index 00000000000..1ae56827504 --- /dev/null +++ b/changelogs/unreleased/issuables-pagination-without-count.yml @@ -0,0 +1,5 @@ +--- +title: Use pagination without COUNT for issues/MRs +merge_request: +author: +type: other |