diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2018-03-06 13:32:48 +0000 |
---|---|---|
committer | Sean McGivern <sean@mcgivern.me.uk> | 2018-03-06 13:32:48 +0000 |
commit | 5e8138aa54492dd3ace42d889ba01f82e8e19c83 (patch) | |
tree | 4e0dec2466b4fec72274710fdd8f824d84e7acee | |
parent | af84ccbd8227ac6d4d609bc8ff941ee6cad131f5 (diff) | |
parent | b5ec6097b75819626083726d1073978d11aba7e3 (diff) | |
download | gitlab-ce-5e8138aa54492dd3ace42d889ba01f82e8e19c83.tar.gz |
Merge branch 'an/network-controller-fix' into 'master'
Fix Gitaly n+1 in NetworkController#show
Closes #37602 and gitaly#1056
See merge request gitlab-org/gitlab-ce!17548
-rw-r--r-- | app/controllers/projects/network_controller.rb | 25 | ||||
-rw-r--r-- | app/models/network/commit.rb | 7 | ||||
-rw-r--r-- | changelogs/unreleased/an-network-controller-fix.yml | 5 |
3 files changed, 17 insertions, 20 deletions
diff --git a/app/controllers/projects/network_controller.rb b/app/controllers/projects/network_controller.rb index 3b10a93e97f..35fec229db7 100644 --- a/app/controllers/projects/network_controller.rb +++ b/app/controllers/projects/network_controller.rb @@ -9,25 +9,22 @@ class Projects::NetworkController < Projects::ApplicationController before_action :assign_commit def show - # n+1: https://gitlab.com/gitlab-org/gitlab-ce/issues/37602 - Gitlab::GitalyClient.allow_n_plus_1_calls do - @url = project_network_path(@project, @ref, @options.merge(format: :json)) - @commit_url = project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s") - - respond_to do |format| - format.html do - if @options[:extended_sha1] && !@commit - flash.now[:alert] = "Git revision '#{@options[:extended_sha1]}' does not exist." - end - end + @url = project_network_path(@project, @ref, @options.merge(format: :json)) + @commit_url = project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s") - format.json do - @graph = Network::Graph.new(project, @ref, @commit, @options[:filter_ref]) + respond_to do |format| + format.html do + if @options[:extended_sha1] && !@commit + flash.now[:alert] = "Git revision '#{@options[:extended_sha1]}' does not exist." end end - render + format.json do + @graph = Network::Graph.new(project, @ref, @commit, @options[:filter_ref]) + end end + + render end def assign_commit diff --git a/app/models/network/commit.rb b/app/models/network/commit.rb index 9357e55b419..22d48c9e661 100644 --- a/app/models/network/commit.rb +++ b/app/models/network/commit.rb @@ -24,12 +24,7 @@ module Network end def parents(map) - @commit.parents.map do |p| - if map.include?(p.id) - map[p.id] - end - end - .compact + map.values_at(*@commit.parent_ids).compact end end end diff --git a/changelogs/unreleased/an-network-controller-fix.yml b/changelogs/unreleased/an-network-controller-fix.yml new file mode 100644 index 00000000000..cb2c447b957 --- /dev/null +++ b/changelogs/unreleased/an-network-controller-fix.yml @@ -0,0 +1,5 @@ +--- +title: Prevent the graphs page from generating unnecessary Gitaly requests +merge_request: 37602 +author: +type: performance |