N+1 queries with API /groups/:id/projects endpoint
$ ENABLE_BULLET=1 bundle exec rspec spec/requests/api/groups_spec.rb:353
warning: parser/current is loading parser/ruby23, which recognizes
warning: 2.3.3-compliant syntax, but you are running 2.3.5.
warning: please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
Run options: include {:locations=>{"./spec/requests/api/groups_spec.rb"=>[353]}}
==> Setting up GitLab Shell...
GitLab Shell setup in 0.453669 seconds...
==> Setting up Gitaly...
Gitaly setup in 0.69875 seconds...
== Seed from /Users/stanhu/gitlab/gdk-ee/gitlab/db/fixtures/test/01_plan.rb
FF........F..
Failures:
1) API::Groups GET /groups/:id/projects when authenticated as user returns the group's projects
Failure/Error: @app.call(env)
Bullet::Notification::UnoptimizedQueryError:
user: stanhu
GET /api/v4/groups/1/projects?private_token=dbcfff8e5d0ecdecdf159409eac97e2063ac31e240cb6f2b3ab29ae0e5b8f6a5c359d27af1730350045af13ef7150292d4a1
USE eager loading detected
Project => [:group]
Add to your finder: :includes => [:group]
Call stack
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/api/entities.rb:140:in `block in <class:Project>'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/middleware/multipart.rb:93:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/request_profiler/middleware.rb:14:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/jira/middleware.rb:15:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/middleware/go.rb:18:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/etag_caching/middleware.rb:11:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/middleware/read_only.rb:31:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/request_context.rb:18:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/config/initializers/fix_local_cache_middleware.rb:9:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/middleware/static.rb:9:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/testing/request_inspector_middleware.rb:31:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/testing/request_blocker_middleware.rb:44:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/metrics/requests_rack_middleware.rb:27:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/spec/requests/api/groups_spec.rb:356:in `block (4 levels) in <top (required)>'
# ./lib/gitlab/middleware/read_only.rb:31:in `call'
# ./lib/gitlab/request_context.rb:18:in `call'
# ./config/initializers/fix_local_cache_middleware.rb:9:in `call'
# ./lib/gitlab/middleware/static.rb:9:in `call'
# ./lib/gitlab/testing/request_inspector_middleware.rb:31:in `call'
# ./lib/gitlab/testing/request_blocker_middleware.rb:44:in `call'
# ./lib/gitlab/metrics/requests_rack_middleware.rb:27:in `call'
# ./spec/requests/api/groups_spec.rb:356:in `block (4 levels) in <top (required)>'
2) API::Groups GET /groups/:id/projects when authenticated as user returns the group's projects with simple representation
Failure/Error: @app.call(env)
Bullet::Notification::UnoptimizedQueryError:
user: stanhu
GET /api/v4/groups/8/projects?private_token=c97b08172bf0c7ae46165ec6671dbfab63fc660b0953bdf282d4290f7fd9ed4968650168bc1b2902075f0979edfa249067ff
USE eager loading detected
Project => [:route]
Add to your finder: :includes => [:route]
Call stack
/Users/stanhu/gitlab/gdk-ee/gitlab/app/models/concerns/routable.rb:129:in `uncached_full_path'
/Users/stanhu/gitlab/gdk-ee/gitlab/app/models/concerns/routable.rb:106:in `full_path'
/Users/stanhu/gitlab/gdk-ee/gitlab/app/models/project.rb:530:in `repository'
/Users/stanhu/gitlab/gdk-ee/gitlab/app/models/project.rb:1136:in `default_branch'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/middleware/multipart.rb:93:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/request_profiler/middleware.rb:14:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/jira/middleware.rb:15:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/middleware/go.rb:18:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/etag_caching/middleware.rb:11:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/middleware/read_only.rb:31:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/request_context.rb:18:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/config/initializers/fix_local_cache_middleware.rb:9:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/middleware/static.rb:9:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/testing/request_inspector_middleware.rb:31:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/testing/request_blocker_middleware.rb:44:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/metrics/requests_rack_middleware.rb:27:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/spec/requests/api/groups_spec.rb:367:in `block (4 levels) in <top (required)>'
# ./lib/gitlab/middleware/read_only.rb:31:in `call'
# ./lib/gitlab/request_context.rb:18:in `call'
# ./config/initializers/fix_local_cache_middleware.rb:9:in `call'
# ./lib/gitlab/middleware/static.rb:9:in `call'
# ./lib/gitlab/testing/request_inspector_middleware.rb:31:in `call'
# ./lib/gitlab/testing/request_blocker_middleware.rb:44:in `call'
# ./lib/gitlab/metrics/requests_rack_middleware.rb:27:in `call'
# ./spec/requests/api/groups_spec.rb:367:in `block (4 levels) in <top (required)>'
3) API::Groups GET /groups/:id/projects when using group path in URL returns any existing group
Failure/Error: @app.call(env)
Bullet::Notification::UnoptimizedQueryError:
user: stanhu
GET /api/v4/groups/group21/projects?private_token=d693e555ef5096456dc0c47af5184776c17a4036dbba50c94a5e822b5669c07c7ae5498fa469a3a208c2cfe23f1c2a4bc6f4
USE eager loading detected
Project => [:group]
Add to your finder: :includes => [:group]
Call stack
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/api/entities.rb:140:in `block in <class:Project>'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/middleware/multipart.rb:93:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/request_profiler/middleware.rb:14:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/jira/middleware.rb:15:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/middleware/go.rb:18:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/etag_caching/middleware.rb:11:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/middleware/read_only.rb:31:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/request_context.rb:18:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/config/initializers/fix_local_cache_middleware.rb:9:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/middleware/static.rb:9:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/testing/request_inspector_middleware.rb:31:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/testing/request_blocker_middleware.rb:44:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/lib/gitlab/metrics/requests_rack_middleware.rb:27:in `call'
/Users/stanhu/gitlab/gdk-ee/gitlab/spec/requests/api/groups_spec.rb:452:in `block (4 levels) in <top (required)>'
# ./lib/gitlab/middleware/read_only.rb:31:in `call'
# ./lib/gitlab/request_context.rb:18:in `call'
# ./config/initializers/fix_local_cache_middleware.rb:9:in `call'
# ./lib/gitlab/middleware/static.rb:9:in `call'
# ./lib/gitlab/testing/request_inspector_middleware.rb:31:in `call'
# ./lib/gitlab/testing/request_blocker_middleware.rb:44:in `call'
# ./lib/gitlab/metrics/requests_rack_middleware.rb:27:in `call'
# ./spec/requests/api/groups_spec.rb:452:in `block (4 levels) in <top (required)>'
Finished in 14.24 seconds (files took 19.87 seconds to load)
13 examples, 3 failures
Failed examples:
rspec ./spec/requests/api/groups_spec.rb:355 # API::Groups GET /groups/:id/projects when authenticated as user returns the group's projects
rspec ./spec/requests/api/groups_spec.rb:366 # API::Groups GET /groups/:id/projects when authenticated as user returns the group's projects with simple representation
rspec ./spec/requests/api/groups_spec.rb:451 # API::Groups GET /groups/:id/projects when using group path in URL returns any existing group
ZD: https://gitlab.zendesk.com/agent/tickets/85116 (see the SQL output for more details)
Edited by Stan Hu