MergeRequests::CreateService#execute is calling Gitaly n+1 times per invocation
MergeRequests::CreateService#execute
is calling Gitaly n+1
times per invocation.
This code needs to be refactored to fetch all required information in a single batched Gitaly call.
Known Problem Methods
-
app/controllers/projects/merge_requests/creations_controller.rb#create
->app/models/merge_request_diff.rb#save_git_content
->Gitlab::Git::Commit#find
Failing Tests
Spinach failing tests
features/project/forked_merge_requests.feature
features/explore/groups.feature
features/project/fork.feature
features/project/pages.feature
rspec
rspec './spec/features/merge_requests/user_uses_slash_commands_spec.rb[1:1:1:1:1]'
Sample Stacks
/builds/gitlab-org/gitlab-ce/lib/gitlab/gitaly_client.rb:143: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:231:in `keep_around'
/builds/gitlab-org/gitlab-ce/app/models/merge_request_diff.rb:331:in `block in keep_around_commits'
/builds/gitlab-org/gitlab-ce/app/models/merge_request_diff.rb:330:in `each'
/builds/gitlab-org/gitlab-ce/app/models/merge_request_diff.rb:330:in `keep_around_commits'
/builds/gitlab-org/gitlab-ce/app/models/merge_request_diff.rb:54:in `save_git_content'
/builds/gitlab-org/gitlab-ce/app/models/merge_request.rb:426:in `block in create_merge_request_diff'
/builds/gitlab-org/gitlab-ce/lib/gitlab/gitaly_client.rb:195:in `allow_n_plus_1_calls'
/builds/gitlab-org/gitlab-ce/app/models/merge_request.rb:425:in `create_merge_request_diff'
/builds/gitlab-org/gitlab-ce/app/models/merge_request.rb:418:in `ensure_merge_request_diff'
/builds/gitlab-org/gitlab-ce/app/services/issuable_base_service.rb:167:in `block in create_issuable'
/builds/gitlab-org/gitlab-ce/app/services/issuable_base_service.rb:166:in `create_issuable'
/builds/gitlab-org/gitlab-ce/app/services/issuable_base_service.rb:186: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:195: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/app/controllers/projects/merge_requests/creations_controller.rb:18:in `create'
Edited by Andrew Newdigate