Skip to content

Advanced Search API: Eager load more issue associations to reduce N+1 queries

Alishan Ladhani requested to merge ali/improve-issue-search-performance into master

What does this MR do?

Improve performance of the Advanced Search API when searching for issues. Part of #215712 (closed).

There are several N+1 queries happening when a search is performed with the issues scope, as outlined here. These associations can be eager loaded to improve performance.

The changes in this MR reduce the number of queries performed for a page results from ~250 down to ~200 queries.

Performance testing was done locally, and shows ~20% improvement in response time. This is just a rough guideline, as the local environment is quite different from the 10k reference architecture where the performance issue was observed.

Some N+1 queries still exist, and these can be optimized in a future iteration.

198 queries for a full page of results
  ApplicationSetting Load (0.9ms)  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'
  PersonalAccessToken Load (0.3ms)  SELECT "personal_access_tokens".* FROM "personal_access_tokens" WHERE "personal_access_tokens"."token_digest" = '' LIMIT 1
  ↳ app/models/concerns/token_authenticatable_strategies/digest.rb:8:in `find_token_authenticatable'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ lib/gitlab/auth/auth_finders.rb:103:in `find_user_from_access_token'
   (0.2ms)  SELECT "features"."key" FROM "features"
  ↳ lib/feature.rb:15:in `feature_names'
  License Load (0.3ms)  SELECT "licenses".* FROM "licenses" ORDER BY "licenses"."id" DESC LIMIT 1
  ↳ ee/app/models/license.rb:268:in `load_license'
  Project Load (0.7ms)  SELECT "projects".* FROM "projects" WHERE "projects"."pending_delete" = FALSE AND "projects"."id" = 7 LIMIT 1
  ↳ lib/api/helpers.rb:108:in `find_project'
  Group Load (0.5ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."type" = 'Group' AND "namespaces"."id" = 27 AND "namespaces"."type" = 'Group' LIMIT 1
  ↳ ee/app/policies/ee/project_policy.rb:308:in `block (2 levels) in <module:ProjectPolicy>'
  IpRestriction Load (0.3ms)  SELECT "ip_restrictions".* FROM "ip_restrictions" WHERE "ip_restrictions"."group_id" = 27
  ↳ ee/lib/gitlab/ip_restriction/enforcer.rb:31:in `allows_address?'
  Project Load (0.7ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/services/search_service.rb:20:in `project'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 7 AND "routes"."source_type" = 'Project' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
   (1.1ms)  SELECT "projects"."id" FROM "projects" LEFT JOIN project_features ON projects.id = project_features.project_id WHERE "projects"."id" = 7 AND ("project_features"."issues_access_level" > 0 OR "project_features"."issues_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:17:in `pluck_primary_key'
  Issue Search (7.5ms) {index: "gitlab-development", type: "doc", body: {query: {bool: {must: [{simple_query_string: {fields: ["title^2", "description"], query: "*", default_operator: :and}}], filter: [{term: {type: "issue"}}, {has_parent: {parent_type: "project", query: {bool: {should: [[{bool: {filter: [{terms: {id: [7]}}, {terms: {"issues_access_level"=>[20, 10]}}]}}]]}}}}]}}, sort: [{updated_at: {order: :desc}}, :_score], highlight: {fields: {title: {}, description: {}}}}, routing: "project_7", size: 20, from: 0}
   (0.6ms)  SELECT COUNT(*) FROM "issues" WHERE "issues"."id" IN (449, 448, 447, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 329, 330, 331, 332, 333, 334, 328)
  ↳ ee/lib/gitlab/elastic/search_results.rb:172:in `eager_load'
  Issue Load (0.5ms)  SELECT "issues".* FROM "issues" WHERE "issues"."id" IN (449, 448, 447, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 329, 330, 331, 332, 333, 334, 328)
  ↳ ee/lib/gitlab/elastic/search_results.rb:172:in `eager_load'
  Project Load (0.7ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7
  ↳ ee/lib/gitlab/elastic/search_results.rb:172:in `eager_load'
  Route Load (0.4ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_type" = 'Project' AND "routes"."source_id" = 7
  ↳ ee/lib/gitlab/elastic/search_results.rb:172:in `eager_load'
  Namespace Load (0.5ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27
  ↳ ee/lib/gitlab/elastic/search_results.rb:172:in `eager_load'
  LabelLink Load (0.4ms)  SELECT "label_links".* FROM "label_links" WHERE "label_links"."target_type" = 'Issue' AND "label_links"."target_id" IN (58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 328, 329, 330, 331, 332, 333, 334, 447, 448, 449)
  ↳ ee/lib/gitlab/elastic/search_results.rb:172:in `eager_load'
  Label Load (0.4ms)  SELECT "labels".* FROM "labels" WHERE "labels"."id" IN (51, 105, 103) ORDER BY "labels"."title" ASC
  ↳ ee/lib/gitlab/elastic/search_results.rb:172:in `eager_load'
  Timelog Load (0.4ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" IN (58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 328, 329, 330, 331, 332, 333, 334, 447, 448, 449)
  ↳ ee/lib/gitlab/elastic/search_results.rb:172:in `eager_load'
  IssueAssignee Load (0.4ms)  SELECT "issue_assignees".* FROM "issue_assignees" WHERE "issue_assignees"."issue_id" IN (58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 328, 329, 330, 331, 332, 333, 334, 447, 448, 449)
  ↳ ee/lib/gitlab/elastic/search_results.rb:172:in `eager_load'
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" IN (5, 18, 8, 6, 21, 7, 1, 19)
  ↳ ee/lib/gitlab/elastic/search_results.rb:172:in `eager_load'
  ProjectFeature Load (0.4ms)  SELECT "project_features".* FROM "project_features" WHERE "project_features"."project_id" = 7 LIMIT 1
  ↳ app/policies/project_policy.rb:539:in `feature_available?'
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 5 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 449 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 449 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 449 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 449 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 34 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 18 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 59 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 59 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 59 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 59 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 33 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.7ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.5ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 6 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.5ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 60 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.7ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 60 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 60 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 60 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Milestone Load (0.4ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 32 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.7ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.5ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.4ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 7 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 61 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 61 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 61 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 61 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 31 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.6ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 20 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 62 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 62 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 62 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 62 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 34 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.7ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 18 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 63 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 63 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 63 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 63 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Milestone Load (0.4ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 32 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 21 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 64 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 64 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.4ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 64 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 64 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 31 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 20 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 65 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.7ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 65 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.4ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 65 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 65 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 34 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.5ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 66 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.7ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 66 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.4ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 66 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 66 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Milestone Load (0.4ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 33 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.7ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.5ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.4ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 5 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 67 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 67 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 67 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 67 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 53 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 20 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.5ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 328 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 328 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 328 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 328 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  User Load (0.7ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 20 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Milestone Load (0.6ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 53 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.7ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 7 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 329 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 329 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 329 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 329 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 6 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 53 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 18 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 330 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 330 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 330 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 330 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 53 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.5ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 5 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 331 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 331 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 331 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 331 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 6 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Milestone Load (0.4ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 53 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 6 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 332 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 332 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 332 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 332 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 18 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 53 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 5 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 333 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.7ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 333 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 333 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 333 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 53 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 18 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 334 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 334 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 334 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 334 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 5 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 447 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 447 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 447 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.4ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 447 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 5 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 448 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.8ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 448 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 448 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 448 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 31 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 7 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 27 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 27 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 5 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 58 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 58 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 58 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 58 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'

Local performance test results:

Before
* Environment:                Localhost
* Environment Version:        12.10.0-pre `8e0456228e5`
* Option:                     60s_20rps
* Date:                       2020-04-22
* Run Time:                   1m 1.53s (Start: 18:48:57 UTC, End: 18:49:58 UTC)
* GPT Version:                v1.2.6

NAME                   | RPS  | RPS RESULT       | TTFB AVG  | TTFB P90             | REQ STATUS      | RESULT          
-----------------------|------|------------------|-----------|----------------------|-----------------|-----------------
api_v4_search_projects | 20/s | 2.57/s (>4.80/s) | 6658.96ms | 7955.68ms (<25000ms) | 100.00% (>9.5%) | FAILED³

³ Failure may not be clear from summary alone. Refer to the individual test's full output for further debugging.
After
* Environment:                Localhost
* Environment Version:        12.10.0-pre `c113d6ed793`
* Option:                     60s_20rps
* Date:                       2020-04-24
* Run Time:                   1m 1.57s (Start: 16:29:07 UTC, End: 16:30:09 UTC)
* GPT Version:                v1.2.6

NAME                   | RPS  | RPS RESULT       | TTFB AVG  | TTFB P90             | REQ STATUS      | RESULT          
-----------------------|------|------------------|-----------|----------------------|-----------------|-----------------
api_v4_search_projects | 20/s | 3.18/s (>4.80/s) | 5434.75ms | 6429.76ms (<25000ms) | 100.00% (>9.5%) | FAILED³

³ Failure may not be clear from summary alone. Refer to the individual test's full output for further debugging.

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • [-] 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 Yorick Peterse

Merge request reports