Projects::NetworkController#show is calling Gitaly n+1 times per request
Projects::NetworkController#show
is calling Gitaly n+1
times per request.
This code needs to be refactored to fetch all required information in a single call.
bundle exec spinach -b features/project/network_graph.feature:35
Known Problem Methods
-
app/models/Repository#head_commit
->Gitlab::Git::Commit#find
-
app/models/network/graph.rb#collect_commits
->app/models/network/graph.rb#find_commits
->Gitlab::Git::Commit#find_all
Sample Stack Trace
/builds/gitlab-org/gitlab-ce/lib/gitlab/gitaly_client.rb:185:in `enforce_gitaly_request_limits'
/builds/gitlab-org/gitlab-ce/lib/gitlab/gitaly_client.rb:141:in `migrate'
/builds/gitlab-org/gitlab-ce/lib/gitlab/git/repository.rb:1110:in `gitaly_migrate'
/builds/gitlab-org/gitlab-ce/lib/gitlab/git/commit.rb:63:in `find'
/builds/gitlab-org/gitlab-ce/app/models/repository.rb:108:in `commit'
/builds/gitlab-org/gitlab-ce/app/models/repository.rb:594:in `head_commit'
/builds/gitlab-org/gitlab-ce/app/models/repository.rb:605:in `tree'
/builds/gitlab-org/gitlab-ce/app/models/repository.rb:1052:in `file_on_head'
/builds/gitlab-org/gitlab-ce/app/models/repository.rb:531:in `block in avatar'
/builds/gitlab-org/gitlab-ce/lib/gitlab/gitaly_client.rb:193:in `allow_n_plus_1_calls'
/builds/gitlab-org/gitlab-ce/app/models/repository.rb:530:in `avatar'
/builds/gitlab-org/gitlab-ce/app/models/repository.rb:67:in `block (2 levels) in cache_method'
/builds/gitlab-org/gitlab-ce/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/cache.rb:299:in `block in fetch'
/builds/gitlab-org/gitlab-ce/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/cache.rb:585:in `block in save_block_result_to_cache'
/builds/gitlab-org/gitlab-ce/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/cache.rb:547:in `block in instrument'
/builds/gitlab-org/gitlab-ce/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/notifications.rb:166:in `instrument'
/builds/gitlab-org/gitlab-ce/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/cache.rb:547:in `instrument'
/builds/gitlab-org/gitlab-ce/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/cache.rb:584:in `save_block_result_to_cache'
/builds/gitlab-org/gitlab-ce/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/cache.rb:299:in `fetch'
/builds/gitlab-org/gitlab-ce/lib/repository_cache.rb:20:in `fetch'
/builds/gitlab-org/gitlab-ce/app/models/repository.rb:1036:in `cache_method_output'
/builds/gitlab-org/gitlab-ce/app/models/repository.rb:66:in `block in cache_method'
/builds/gitlab-org/gitlab-ce/app/models/project.rb:924:in `avatar_in_git'
/builds/gitlab-org/gitlab-ce/app/models/project.rb:930:in `avatar_url'
/builds/gitlab-org/gitlab-ce/app/models/project.rb:1075:in `hook_attrs'
/builds/gitlab-org/gitlab-ce/lib/gitlab/hook_data/issuable_builder.rb:16:in `build'
/builds/gitlab-org/gitlab-ce/app/models/concerns/issuable.rb:274:in `to_hook_data'
/builds/gitlab-org/gitlab-ce/app/services/merge_requests/base_service.rb:22:in `hook_data'
/builds/gitlab-org/gitlab-ce/app/services/merge_requests/base_service.rb:33:in `execute_hooks'
/builds/gitlab-org/gitlab-ce/app/services/issuable_base_service.rb:188:in `create'
/builds/gitlab-org/gitlab-ce/app/services/merge_requests/create_service.rb:18:in `block in execute'
/builds/gitlab-org/gitlab-ce/lib/gitlab/gitaly_client.rb:193:in `allow_n_plus_1_calls'
/builds/gitlab-org/gitlab-ce/app/services/merge_requests/create_service.rb:17:in `execute'
/builds/gitlab-org/gitlab-ce/lib/gitlab/gitaly_client.rb:143:in `migrate'
/builds/gitlab-org/gitlab-ce/lib/gitlab/git/commit.rb:144:in `find_all'
/builds/gitlab-org/gitlab-ce/app/models/network/graph.rb:119:in `find_commits'
/builds/gitlab-org/gitlab-ce/app/models/network/graph.rb:84:in `count_to_display_commit_in_center'
/builds/gitlab-org/gitlab-ce/app/models/network/graph.rb:41:in `collect_commits'
/builds/gitlab-org/gitlab-ce/app/models/network/graph.rb:16:in `initialize'
/builds/gitlab-org/gitlab-ce/app/controllers/projects/network_controller.rb:24:in `new'
/builds/gitlab-org/gitlab-ce/app/controllers/projects/network_controller.rb:24:in `block (3 levels) in show'
/builds/gitlab-org/gitlab-ce/app/controllers/projects/network_controller.rb:16:in `block in show'
/builds/gitlab-org/gitlab-ce/lib/gitlab/gitaly_client.rb:195:in `allow_n_plus_1_calls'
/builds/gitlab-org/gitlab-ce/app/controllers/projects/network_controller.rb:12:in `show'
Edited by Andrew Newdigate