Eliminate Gitaly N+1 queries with notes API
Similar to
gitlab-org/gitlab-ce!31834, we
see that in https://gitlab.com/gitlab-org/gitlab-ce/issues/65957 there
can be hundreds, even thousands, of Gitaly requests in the
/api/:version/projects/:id/merge_requests/:noteable_id/notes
endpoint.
Previously, the API to retrieve notes generated hundreds of Gitaly calls to determine whether a system note should be shown to the user. It did this by:
- Rendering the Markdown
- Extracting cross-references from the Markdown
- Issuing a Gitaly
FindCommit
RPC for every reference to validate that the commit exists.
The last step is unnecessary because we don't need to display a commit
if the user doesn't have access to the project in the first place.
RendersNotes#prepare_notes_for_rendering
is already used in
MergeRequestsController
, which is why we don't see N+1 Gitaly calls
there. We use it here to optimize the note redaction process.
Edited by Stan Hu