Skip to content

Eliminate Gitaly N+1 queries with notes API

Stan Hu requested to merge sh-eliminate-gitaly-nplus-one-notes into master

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:

  1. Rendering the Markdown
  2. Extracting cross-references from the Markdown
  3. 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

Merge request reports