Commit e3e461fb authored by Rémy Coutable's avatar Rémy Coutable

Merge branch '44861-mark-gitaly-nplus-one-again' into 'master'

Re-enable allowing n+1 Gitaly for branches index

Closes #44861

See merge request gitlab-org/gitlab-ce!18131
parents 83b2e703 78ea82c3
...@@ -22,9 +22,13 @@ class Projects::BranchesController < Projects::ApplicationController ...@@ -22,9 +22,13 @@ class Projects::BranchesController < Projects::ApplicationController
@refs_pipelines = @project.pipelines.latest_successful_for_refs(@branches.map(&:name)) @refs_pipelines = @project.pipelines.latest_successful_for_refs(@branches.map(&:name))
@merged_branch_names = repository.merged_branch_names(@branches.map(&:name)) @merged_branch_names = repository.merged_branch_names(@branches.map(&:name))
@max_commits = @branches.reduce(0) do |memo, branch|
diverging_commit_counts = repository.diverging_commit_counts(branch) # n+1: https://gitlab.com/gitlab-org/gitaly/issues/992
[memo, diverging_commit_counts[:behind], diverging_commit_counts[:ahead]].max Gitlab::GitalyClient.allow_n_plus_1_calls do
@max_commits = @branches.reduce(0) do |memo, branch|
diverging_commit_counts = repository.diverging_commit_counts(branch)
[memo, diverging_commit_counts[:behind], diverging_commit_counts[:ahead]].max
end
end end
render render
......
...@@ -398,6 +398,22 @@ describe Projects::BranchesController do ...@@ -398,6 +398,22 @@ describe Projects::BranchesController do
end end
end end
# We need :request_store because Gitaly only counts the queries whenever
# `RequestStore.active?` in GitalyClient.enforce_gitaly_request_limits
# And the main goal of this test is making sure TooManyInvocationsError
# was not raised whenever the cache is enabled yet cold.
context 'when cache is enabled yet cold', :request_store do
it 'return with a status 200' do
get :index,
namespace_id: project.namespace,
project_id: project,
state: 'all',
format: :html
expect(response).to have_gitlab_http_status(200)
end
end
context 'when branch contains an invalid UTF-8 sequence' do context 'when branch contains an invalid UTF-8 sequence' do
before do before do
project.repository.create_branch("wrong-\xE5-utf8-sequence") project.repository.create_branch("wrong-\xE5-utf8-sequence")
...@@ -414,7 +430,7 @@ describe Projects::BranchesController do ...@@ -414,7 +430,7 @@ describe Projects::BranchesController do
end end
end end
context 'when depreated sort/search/page parameters are specified' do context 'when deprecated sort/search/page parameters are specified' do
it 'returns with a status 301 when sort specified' do it 'returns with a status 301 when sort specified' do
get :index, get :index,
namespace_id: project.namespace, namespace_id: project.namespace,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment