• Stan Hu's avatar
    Eliminate Gitaly N+1 queries with notes API · e24b9c25
    Stan Hu authored
    Similar to https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/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.
    e24b9c25
notes_helpers.rb 4 KB