Skip to content

Reimplement tree pagination for Rugged

Vasilii Iakliushin requested to merge 334140_support_pagination_for_rugged into master

What does this MR do?

Contributes to #334140 (closed)

!66657 (merged) added support for tree pagination options for Gitaly. However, rugged implementation for it is missing but some users can still rely on it.

Problem

After we update frontend to use a PaginatedTree GraphQL query, users without Gitaly support will receive a non-paginated response.

Solution

Reimplement pagination from Go version in Ruby.

Screenshots or Screencasts (strongly suggested)

How to setup and validate locally (strongly suggested)

Setup

  1. A repository with more than 100 elements in tree (or reduce max_page_size here to test in the smaller repository).

  2. Adjust GraphQL query for your repository

query {
  project(fullPath:"root/my-awesome-project") {
    name
    repository {
      paginatedTree {
        pageInfo {
          endCursor
          startCursor
        }
        nodes {

          trees {
            nodes {
              path
            }
          }
          blobs {
            edges {
              node {
                path
              }
            }
          }
          submodules {
            nodes {
              path
            }
          }
        }
      }
    }
  }
}
  1. Stop rails-web (gdk stop rails-web) and use gdk thin to enable rugged-mode.

Testing

  1. Open GraphQL explorer (<GDK_host>/-/graphql-explorer) and execute the graphQL query
  2. User endCursor value in modified GraphQL query to fetch the next page
query {
  project(fullPath:"root/my-awesome-project") {
    name
    repository {
      paginatedTree(after: "<endCursor value from previous response>" {
  ...
  1. Confirm that you received the next page

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

Does this MR contain changes to processing or storing of credentials or tokens, authorization and authentication methods or other items described in the security review guidelines? If not, then delete this Security section.

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team
Edited by Vasilii Iakliushin

Merge request reports

Loading