Improve performance of Group Search API (advanced): merge_requests scope

Summary

Advanced Group Search API requests for merge_requests scope is not performing under load

Severity label added per handbook guide

Note: Global/Project performance does not fall into the same severity label, so a separate issue will be opened to track those

Performance Results from 10k architecture

image

image

Possible fixes

There are additional opportunities for preloading data not fixed in the first iteration (issues linked)

SQL
Started GET "/api/v4/groups/54/search?scope=merge_requests&search=*" for 127.0.0.1 at 2020-06-11 09:13:00 -0400
Gitlab::Metrics::Samplers::DatabaseSampler: A copy of EE::Gitlab::Metrics::Samplers::DatabaseSampler has been removed from the module tree but is still active!, stopping
Creating scope :of_projects. Overwriting existing method MergeRequest.of_projects.
Creating scope :join_project. Overwriting existing method MergeRequest.join_project.
Creating scope :references_project. Overwriting existing method MergeRequest.references_project.
Creating scope :system. Overwriting existing method Note.system.
Creating scope :group_view_details. Overwriting existing method User.group_view_details.
Creating scope :without_statuses. Overwriting existing method CommitStatus.without_statuses.
Creating scope :opened. Overwriting existing method Epic.opened.
Creating scope :closed. Overwriting existing method Epic.closed.
An enum element in Ci::Runner uses the prefix 'not_'. This will cause a conflict with auto generated negative scopes.
Creating scope :with_files_stored_remotely. Overwriting existing method Ci::JobArtifact.with_files_stored_remotely.
Creating scope :order_created_desc. Overwriting existing method Packages::Package.order_created_desc.
Creating scope :order_name_desc. Overwriting existing method Packages::Package.order_name_desc.
   (0.3ms)  SELECT EXTRACT(EPOCH FROM (now() - pg_last_xact_replay_timestamp()))::float as lag
   lib/gitlab/middleware/basic_health_check.rb:25:in `call'
   (1.0ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
  ↳ lib/gitlab/middleware/basic_health_check.rb:25:in `call'
  ApplicationSetting Load (2.3ms)  SELECT "application_settings".* FROM "application_settings" ORDER BY "application_settings"."id" DESC LIMIT 1
  ↳ app/models/concerns/cacheable_attributes.rb:19:in `current_without_cache'
Creating scope :of_projects. Overwriting existing method MergeRequest.of_projects.
Creating scope :join_project. Overwriting existing method MergeRequest.join_project.
Creating scope :references_project. Overwriting existing method MergeRequest.references_project.
Creating scope :system. Overwriting existing method Note.system.
Creating scope :group_view_details. Overwriting existing method User.group_view_details.
Creating scope :without_statuses. Overwriting existing method CommitStatus.without_statuses.
Creating scope :opened. Overwriting existing method Epic.opened.
Creating scope :closed. Overwriting existing method Epic.closed.
An enum element in Ci::Runner uses the prefix 'not_'. This will cause a conflict with auto generated negative scopes.
Creating scope :with_files_stored_remotely. Overwriting existing method Ci::JobArtifact.with_files_stored_remotely.
  PersonalAccessToken Load (6.4ms)  SELECT "personal_access_tokens".* FROM "personal_access_tokens" WHERE "personal_access_tokens"."token_digest" = 'R27ZoLo1xAaezTWG/7z4uMnF9M8yUPN1lDKLEh0cQq4=' LIMIT 1
   app/models/concerns/token_authenticatable_strategies/digest.rb:8:in `find_token_authenticatable'
  User Load (6.0ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ lib/gitlab/auth/auth_finders.rb:102:in `find_user_from_access_token'
Creating scope :order_created_desc. Overwriting existing method Packages::Package.order_created_desc.
Creating scope :order_name_desc. Overwriting existing method Packages::Package.order_name_desc.
  License Load (0.5ms)  SELECT "licenses".* FROM "licenses" ORDER BY "licenses"."id" DESC LIMIT 100
  ↳ ee/app/models/license.rb:265:in `load_license'
  Group Load (9.9ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."type" = 'Group' AND "namespaces"."id" = 54 LIMIT 1
   lib/api/helpers.rb:129:in `find_group'
  IpRestriction Load (3.4ms)  SELECT "ip_restrictions".* FROM "ip_restrictions" WHERE "ip_restrictions"."group_id" = 54
  ↳ ee/lib/gitlab/ip_restriction/enforcer.rb:31:in `allows_address?'
  Group Load (0.5ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."type" = 'Group' AND "namespaces"."id" = 54 LIMIT 1
  ↳ app/services/search_service.rb:36:in `group'
  Namespace Exists? (4.6ms)  WITH RECURSIVE "base_and_descendants" AS ((SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" IN (SELECT "elasticsearch_indexed_namespaces"."namespace_id" FROM "elasticsearch_indexed_namespaces"))
UNION
(SELECT "namespaces".* FROM "namespaces", "base_and_descendants" WHERE "namespaces"."parent_id" = "base_and_descendants"."id")) SELECT 1 AS one FROM "base_and_descendants" AS "namespaces" WHERE "namespaces"."id" = 54 LIMIT 1
   ee/app/models/ee/application_setting.rb:154:in `elasticsearch_indexes_namespace?'
  Route Load (4.7ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 54 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
   (18.7ms)  SELECT "projects"."id" FROM "projects" INNER JOIN routes rs ON rs.source_id = projects.id AND rs.source_type = 'Project' 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"."archived" = FALSE AND (rs.path LIKE 'qa-perf-test-land/%') ORDER BY "projects"."id" DESC
  ↳ ee/app/services/ee/search/group_service.rb:15:in `elastic_projects'
  CACHE Namespace Exists? (0.1ms)  WITH RECURSIVE "base_and_descendants" AS ((SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" IN (SELECT "elasticsearch_indexed_namespaces"."namespace_id" FROM "elasticsearch_indexed_namespaces"))
UNION
(SELECT "namespaces".* FROM "namespaces", "base_and_descendants" WHERE "namespaces"."parent_id" = "base_and_descendants"."id")) SELECT 1 AS one FROM "base_and_descendants" AS "namespaces" WHERE "namespaces"."id" = 54 LIMIT 1
   ee/app/models/ee/application_setting.rb:154:in `elasticsearch_indexes_namespace?'
   (4.0ms)  SELECT "projects"."id" FROM "projects" LEFT JOIN project_features ON projects.id = project_features.project_id WHERE "projects"."id" = 63 AND ("project_features"."merge_requests_access_level" > 0 OR "project_features"."merge_requests_access_level" IS NULL) AND (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))
  ↳ app/models/application_record.rb:21:in `pluck_primary_key'
   (0.9ms)  SELECT "projects"."id" FROM "projects" LEFT JOIN project_features ON projects.id = project_features.project_id WHERE "projects"."id" = 63 AND ("project_features"."merge_requests_access_level" > 0 OR "project_features"."merge_requests_access_level" IS NULL) AND (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))
  ↳ app/models/application_record.rb:21:in `pluck_primary_key'
  MergeRequest Search (271.5ms) {index: "gitlab-development", type: "doc", body: {query: {bool: {must: [{simple_query_string: {fields: ["title^2", "description"], query: "*", default_operator: :and}}], filter: [{term: {type: "merge_request"}}, {has_parent: {parent_type: "project", query: {bool: {should: [{bool: {filter: [{terms: {id: [63]}}, {terms: {"merge_requests_access_level"=>[20, 10]}}]}}]}}}}]}}, sort: [{updated_at: {order: :desc}}, :_score], highlight: {fields: {title: {}, description: {}}}}, routing: "project_63", size: 20, from: 0}
   (11.4ms)  SELECT COUNT(*) FROM "merge_requests" WHERE "merge_requests"."id" IN (3594, 3584, 3586, 3573, 3596, 3591, 3597, 3590, 3585, 3582, 3581, 3578, 3579, 3595, 3593, 3305, 3592, 3589, 1435, 675)
   ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  MergeRequest Load (4.7ms)  SELECT "merge_requests".* FROM "merge_requests" WHERE "merge_requests"."id" IN (3594, 3584, 3586, 3573, 3596, 3591, 3597, 3590, 3585, 3582, 3581, 3578, 3579, 3595, 3593, 3305, 3592, 3589, 1435, 675)
  ↳ ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  MergeRequestAssignee Load (3.2ms)  SELECT "merge_request_assignees".* FROM "merge_request_assignees" WHERE "merge_request_assignees"."merge_request_id" IN (675, 1435, 3305, 3573, 3578, 3579, 3581, 3582, 3584, 3585, 3586, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597)
  ↳ ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1
   ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  Note Load (10.9ms)  SELECT "notes".* FROM "notes" WHERE "notes"."type" IN ('DiffNote', 'DiscussionNote') AND "notes"."noteable_type" IN ('MergeRequest', 'DesignManagement::Design') AND "notes"."system" = FALSE AND "notes"."resolved_at" IS NULL AND "notes"."noteable_id" IN (675, 1435, 3305, 3573, 3578, 3579, 3581, 3582, 3584, 3585, 3586, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597)
  ↳ ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
Creating scope :order_name_asc. Overwriting existing method Label.order_name_asc.
Creating scope :order_name_desc. Overwriting existing method Label.order_name_desc.
  LabelLink Load (4.7ms)  SELECT "label_links".* FROM "label_links" WHERE "label_links"."target_type" = 'MergeRequest' AND "label_links"."target_id" IN (675, 1435, 3305, 3573, 3578, 3579, 3581, 3582, 3584, 3585, 3586, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597)
  ↳ ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  Label Load (3.8ms)  SELECT "labels".* FROM "labels" WHERE "labels"."id" = 267 ORDER BY "labels"."title" ASC
   ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  Timelog Load (5.1ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."merge_request_id" IN (675, 1435, 3305, 3573, 3578, 3579, 3581, 3582, 3584, 3585, 3586, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597)
  ↳ ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  MergeRequestDiff Load (4.9ms)  SELECT "merge_request_diffs".* FROM "merge_request_diffs" WHERE "merge_request_diffs"."id" IN (587, 1010, 2457, 2724, 2729, 2730, 2732, 2733, 2735, 2736, 2737, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748)
  ↳ ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  Project Load (1.8ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 63
   ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  Route Load (0.4ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_type" = 'Project' AND "routes"."source_id" = 63
  ↳ ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 54
  ↳ ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_type" = 'Namespace' AND "routes"."source_id" = 54
   ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  Project Load (0.5ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 63
  ↳ ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_type" = 'Project' AND "routes"."source_id" = 63
  ↳ ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 54
   ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_type" = 'Namespace' AND "routes"."source_id" = 54
  ↳ ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  MergeRequest::Metrics Load (3.7ms)  SELECT "merge_request_metrics".* FROM "merge_request_metrics" WHERE "merge_request_metrics"."merge_request_id" IN (675, 1435, 3305, 3573, 3578, 3579, 3581, 3582, 3584, 3585, 3586, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597)
  ↳ ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  MergeRequestBlock Load (2.0ms)  SELECT "merge_request_blocks".* FROM "merge_request_blocks" WHERE "merge_request_blocks"."blocked_merge_request_id" IN (675, 1435, 3305, 3573, 3578, 3579, 3581, 3582, 3584, 3585, 3586, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597)
   ee/lib/gitlab/elastic/search_results.rb:176:in `eager_load'
  ProjectFeature Load (0.8ms)  SELECT "project_features".* FROM "project_features" WHERE "project_features"."project_id" = 63 LIMIT 1
  ↳ app/policies/project_policy.rb:633:in `feature_available?'
   (0.2ms)  BEGIN
  ↳ app/models/user.rb:1256:in `ensure_namespace_correct'
  Namespace Load (0.8ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."owner_id" = 1 AND "namespaces"."type" IS NULL LIMIT 1
   app/models/user.rb:1256:in `ensure_namespace_correct'
  User Update (2.1ms)  UPDATE "users" SET "last_activity_on" = '2020-06-11', "updated_at" = '2020-06-11 13:13:14.025593' WHERE "users"."id" = 1
  ↳ config/initializers/config_initializers_active_record_locking.rb:13:in `_update_row'
   (0.5ms)  COMMIT
  ↳ app/services/users/activity_service.rb:36:in `record_activity'
   (1.0ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3597 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (2.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3597 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3597 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.5ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 1435 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 1435 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 1435 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.5ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3305 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3305 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3305 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.5ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3573 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3573 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3573 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3578 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3578 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3578 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3579 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.4ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3579 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.4ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3579 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3581 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3581 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3581 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3582 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3582 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3582 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3584 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3584 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.4ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3584 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3585 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3585 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3585 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3586 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3586 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3586 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3589 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3589 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3589 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3590 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3590 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3590 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3591 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3591 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3591 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3592 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3592 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3592 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3593 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3593 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3593 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3594 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3594 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3594 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3595 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3595 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3595 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3596 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.4ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3596 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3596 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 675 AND "notes"."noteable_type" = 'MergeRequest' AND "notes"."system" = FALSE
   app/models/concerns/issuable.rb:398:in `user_notes_count'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 675 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:90:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 675 AND "award_emoji"."awardable_type" = 'MergeRequest' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:86:in `downvotes'
  Route Load (0.8ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 54 AND "routes"."source_type" = 'Namespace' LIMIT 1
   app/models/concerns/routable.rb:77:in `full_path'
   (0.3ms)  SELECT VERSION()
  ↳ lib/gitlab/database.rb:240:in `database_version'
   (0.2ms)  SELECT pg_current_wal_insert_lsn()::text AS location
  ↳ ee/lib/gitlab/jira/middleware.rb:19:in `call'
Unable to autoload constant Namespaces::PruneAggregationSchedulesWorker, expected /Users/terrichu/Projects/gitlab/gitlab-development-kit/gitlab/app/workers/namespaces/prune_aggregation_schedules_worker.rb to define it excluded from capture: DSN not set
Creating scope :of_projects. Overwriting existing method MergeRequest.of_projects.
Edited by Terri Chu