MergeRequest#create_merge_request_diff is calling Gitaly n+1 times per invocation
MergeRequest#create_merge_request_diff
is calling Gitaly n+1
times per invocation.
This code needs to be refactored to fetch all required information in a single Gitaly call.
Known Problem Methods
-
app/models/merge_request.rb#create_merge_request_diff
->app/models/merge_request_diff.rb#keep_around_commits
->Gitlab::Git::Commit#find
Failing Tests
rspec './spec/features/merge_requests/user_uses_slash_commands_spec.rb[1:1:2:4:1:1]'
rspec ./spec/features/merge_requests/user_uses_slash_commands_spec.rb:141
rspec ./spec/features/projects/merge_requests/user_edits_merge_request_spec.rb:15
Stacks
lib/gitlab/gitaly_client.rb:143:in `migrate'
lib/gitlab/git/repository.rb:1110:in `gitaly_migrate'
lib/gitlab/git/commit.rb:63:in `find'
app/models/repository.rb:108:in `commit'
app/models/repository.rb:231:in `keep_around'
app/models/merge_request_diff.rb:331:in `block in keep_around_commits'
app/models/merge_request_diff.rb:330:in `each'
app/models/merge_request_diff.rb:330:in `keep_around_commits'
app/models/merge_request_diff.rb:54:in `save_git_content'
app/models/merge_request.rb:426:in `block in create_merge_request_diff'
lib/gitlab/gitaly_client.rb:195:in `allow_n_plus_1_calls'
app/models/merge_request.rb:425:in `create_merge_request_diff'
app/models/merge_request.rb:472:in `reload_diff'
app/services/merge_requests/reopen_service.rb:11:in `execute'
app/services/issuable_base_service.rb:278:in `change_state'
app/services/issuable_base_service.rb:213:in `update'
app/services/merge_requests/update_service.rb:21:in `execute'
app/services/notes/quick_actions_service.rb:33:in `execute'
app/services/notes/create_service.rb:39:in `execute'
app/controllers/concerns/notes_actions.rb:38:in `create'
app/controllers/projects/notes_controller.rb:19:in `create'
Edited by Andrew Newdigate