Gitaly N+1 queries in /api/v4/projects/:id/issues
As seen in #mech_symp_alerts, there are Gitaly N+1 queries in the /api/v4/projects/:id/issues
endpoint.
I can reproduce the issue via:
user = User.find_by(username: 'stanhu.admin')
Gitlab::Profiler.with_user(user) { app.get '/api/v4/projects/3980791/issues?state=all&order_by=updated_at&sort=desc&created_after="Thu Jan 01 00:00:00 UTC 1970"&page=23&per_page=100' }
The most common backtrace is FindCommit
:
lib/gitlab/git/commit.rb:75:in `block in find_commit'
lib/gitlab/git/wraps_gitaly_errors.rb:7:in `wrapped_gitaly_errors'
lib/gitlab/git/commit.rb:74:in `find_commit'
lib/gitlab/git/rugged_impl/commit.rb:41:in `find_commit'
lib/gitlab/git/commit.rb:66:in `find'
app/models/repository.rb:1119:in `find_commit'
app/models/repository.rb:113:in `commit'
app/models/project.rb:704:in `commit'
app/models/commit_range.rb:75:in `initialize'
lib/banzai/filter/commit_range_reference_filter.rb:30:in `new'
lib/banzai/filter/commit_range_reference_filter.rb:30:in `find_object'
lib/banzai/filter/abstract_reference_filter.rb:67:in `find_object_from_link'
lib/banzai/filter/abstract_reference_filter.rb:83:in `block in find_object_from_link_cached'
lib/banzai/request_store_reference_cache.rb:13:in `block in cached_call'
lib/banzai/request_store_reference_cache.rb:23:in `get_or_set_cache'
lib/banzai/request_store_reference_cache.rb:13:in `cached_call'
lib/banzai/filter/abstract_reference_filter.rb:82:in `find_object_from_link_cached'
lib/banzai/filter/abstract_reference_filter.rb:174:in `block in object_link_filter'
lib/banzai/filter/commit_range_reference_filter.rb:17:in `block in references_in'
lib/banzai/filter/commit_range_reference_filter.rb:16:in `gsub'
lib/banzai/filter/commit_range_reference_filter.rb:16:in `references_in'
lib/banzai/filter/abstract_reference_filter.rb:56:in `references_in'
lib/banzai/filter/abstract_reference_filter.rb:162:in `object_link_filter'
lib/banzai/filter/abstract_reference_filter.rb:138:in `block (3 levels) in call'
lib/banzai/filter/reference_filter.rb:132:in `replace_link_node_with_href'
lib/banzai/filter/abstract_reference_filter.rb:137:in `block (2 levels) in call'
lib/banzai/filter/reference_filter.rb:113:in `yield_valid_link'
lib/banzai/filter/abstract_reference_filter.rb:117:in `block in call'
lib/banzai/filter/abstract_reference_filter.rb:110:in `each'
lib/banzai/filter/abstract_reference_filter.rb:110:in `call'
lib/banzai/pipeline/base_pipeline.rb:23:in `block (2 levels) in singleton class'
lib/banzai/renderer.rb:130:in `render_result'
lib/banzai/renderer.rb:161:in `block in cacheless_render'
lib/banzai/renderer.rb:160:in `cacheless_render'
lib/banzai/renderer.rb:52:in `cacheless_render_field'
app/models/concerns/cache_markdown_field.rb:49:in `block in refresh_markdown_cache'
app/models/concerns/cache_markdown_field.rb:46:in `map'
app/models/concerns/cache_markdown_field.rb:46:in `refresh_markdown_cache'
app/models/concerns/cache_markdown_field.rb:95:in `updated_cached_html_for'
app/models/concerns/mentionable.rb:66:in `block in all_references'
app/models/concerns/mentionable.rb:58:in `each'
app/models/concerns/mentionable.rb:58:in `all_references'
app/models/concerns/mentionable.rb:28:in `block (2 levels) in <module:Mentionable>'
app/models/concerns/participable.rb:86:in `instance_exec'
app/models/concerns/participable.rb:86:in `block in raw_participants'
app/models/concerns/participable.rb:84:in `each'
app/models/concerns/participable.rb:84:in `raw_participants'
app/models/concerns/participable.rb:67:in `block in all_participants'
app/models/concerns/participable.rb:60:in `participants'
app/models/concerns/issuable.rb:317:in `subscribed_without_subscriptions?'
ee/app/models/ee/issue.rb:52:in `subscribed_without_subscriptions?'
app/models/concerns/subscribable.rb:23:in `subscribed?'
lib/api/entities.rb:649:in `block in <class:Issue>'