Skip to content

Revert "Merge branch 'ab/pagination-batch-counts' into 'master'"

Thong Kuah requested to merge revert-21130 into master

What does this MR do?

Reverts !21130 (merged)

Left changes to lib/api/helpers/pagination.rb and spec/lib/api/helpers/pagination_spec.rb as they have later modifications made to them but nothing will now use #paginate_and_retrieve! for now.

Problem

This form of query is timing out for https://gitlab.com/api/v4/projects. gitlab-com/gl-infra/production#1480 (closed)

SELECT "members".* FROM "members" WHERE "members"."source_type" = 'Project' AND "members"."type" IN ('ProjectMember') AND "members"."user_id" = 273432 AND "members"."requested_at" IS NULL AND "members"."source_id" IN (SELECT projects.id FROM "projects" WHERE (EXISTS (SELECT 1 FROM "project_authorizations" WHERE "project_authorizations"."user_id" = 273432 AND (project_authorizations.project_id = projects.id)) OR projects.visibility_level IN (10,20)) AND "projects"."pending_delete" = FALSE ORDER BY "projects"."created_at" DESC, "projects"."id" DESC)

Availability and Testing

Locally, here's what I get when I navigate to http://localhost:3333/api/v4/projects

Before:

  ProjectMember Load (1.2ms)  SELECT "members".* FROM "members" WHERE "members"."source_type" = $1 AND "members"."type" IN ('ProjectMember') AND "members"."user_id" = $2 AND "members"."requested_at" IS NULL AND "members"."source_id" IN (SELECT projects.id FROM "projects" WHERE (EXISTS (SELECT 1 FROM "project_authorizations" WHERE "project_authorizations"."user_id" = 1 AND (project_authorizations.project_id = projects.id)) OR projects.visibility_level IN (0,10,20)) AND "projects"."pending_delete" = $3 ORDER BY "projects"."created_at" DESC, "projects"."id" DESC)  [["source_type", "Project"], ["user_id", 1], ["pending_delete", false]]
  ↳ lib/api/entities.rb:1106

Explain: !21698 (comment 259636814)

After:

  ProjectMember Load (1.0ms)  SELECT "members".* FROM "members" WHERE "members"."source_type" = $1 AND "members"."type" IN ('ProjectMember') AND "members"."user_id" = $2 AND "members"."requested_at" IS NULL AND "members"."source_id" IN (SELECT  projects.id FROM "projects" WHERE (EXISTS (SELECT 1 FROM "project_authorizations" WHERE "project_authorizations"."user_id" = 1 AND (project_authorizations.project_id = projects.id)) OR projects.visibility_level IN (0,10,20)) AND "projects"."pending_delete" = $3 ORDER BY "projects"."created_at" DESC, "projects"."id" DESC LIMIT $4 OFFSET $5)  [["source_type", "Project"], ["user_id", 1], ["pending_delete", false], ["LIMIT", 20], ["OFFSET", 0]]
  ↳ lib/api/entities.rb:1106

Explain: !21698 (comment 259636921)

Edited by Thong Kuah

Merge request reports