Cache FindCommit results in pipelines view
For each pipeline, the controller will call `Pipeline#latest?` to determine if the pipeline's ref is the latest for that branch. Since it's likely that the same branches are being used in each pipeline, we can reduce Gitaly overhead by caching the results of the FindCommit call.
This commit is contained in:
parent
ee89d9550b
commit
e37383d453
3 changed files with 17 additions and 4 deletions
|
@ -31,10 +31,7 @@ class Projects::PipelinesController < Projects::ApplicationController
|
|||
Gitlab::PollingInterval.set_header(response, interval: POLLING_INTERVAL)
|
||||
|
||||
render json: {
|
||||
pipelines: PipelineSerializer
|
||||
.new(project: @project, current_user: @current_user)
|
||||
.with_pagination(request, response)
|
||||
.represent(@pipelines, disable_coverage: true, preload: true),
|
||||
pipelines: serialize_pipelines,
|
||||
count: {
|
||||
all: @pipelines_count,
|
||||
running: @running_count,
|
||||
|
@ -150,6 +147,15 @@ class Projects::PipelinesController < Projects::ApplicationController
|
|||
|
||||
private
|
||||
|
||||
def serialize_pipelines
|
||||
::Gitlab::GitalyClient.allow_ref_name_caching do
|
||||
PipelineSerializer
|
||||
.new(project: @project, current_user: @current_user)
|
||||
.with_pagination(request, response)
|
||||
.represent(@pipelines, disable_coverage: true, preload: true)
|
||||
end
|
||||
end
|
||||
|
||||
def render_show
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
|
|
5
changelogs/unreleased/sh-cache-pipeline-find-commits.yml
Normal file
5
changelogs/unreleased/sh-cache-pipeline-find-commits.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Cache FindCommit results in pipelines view
|
||||
merge_request: 26776
|
||||
author:
|
||||
type: performance
|
|
@ -28,6 +28,8 @@ describe Projects::PipelinesController do
|
|||
end
|
||||
|
||||
it 'returns serialized pipelines', :request_store do
|
||||
expect(::Gitlab::GitalyClient).to receive(:allow_ref_name_caching).and_call_original
|
||||
|
||||
queries = ActiveRecord::QueryRecorder.new do
|
||||
get_pipelines_index_json
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue