Revert "Merge branch 'ab/pagination-batch-counts' 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)
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process.
Edited by Thong Kuah