500 when filtering by approver and ordered by priority
Summary
When using the new "Approver" filter on a project merge request page and ordering by "priority", GitLab 500's
Steps to reproduce
- Navigate to merge request page for a project
- Filter by priority
- Add an approver:
- Press 'enter'
Example Project
None
What is the current bug behavior?
GitLab "Something went wrong" page is displayed.
What is the expected correct behavior?
Should filter by approver
Relevant logs and/or screenshots
==> /var/log/gitlab/gitlab-rails/production.log <==
Completed 500 Internal Server Error in 31ms (ActiveRecord: 10.6ms | Elasticsearch: 0.0ms)
==> /var/log/gitlab/gitlab-rails/production_json.log <==
{"method":"GET","path":"/some_group/some_project/merge_requests","format":"html","controller":"Projects::MergeRequestsController","action":"index","status":500,"error":"ActiveRecord::StatementInvalid: PG::GroupingError: ERROR: column \"merge_requests.target_branch\" must appear in the GROUP BY clause or be used in an aggregate function\nLINE 1: SELECT merge_requests.*, (SELECT MIN(\"label_priorities\".\"pr...\n ^\n: SELECT merge_requests.*, (SELECT MIN(\"label_priorities\".\"priority\") FROM \"labels\" INNER JOIN \"label_links\" ON \"label_links\".\"label_id\" = \"labels\".\"id\" LEFT OUTER JOIN \"label_priorities\" ON \"labels\".\"id\" = \"label_priorities\".\"label_id\" WHERE (label_priorities.project_id = merge_requests.target_project_id) AND (label_links.target_id = merge_requests.id) AND \"label_links\".\"target_type\" = 'MergeRequest') AS highest_priority, MIN(milestones.due_date) FROM (SELECT \"merge_requests\".* FROM \"merge_requests\" INNER JOIN \"approval_merge_request_rules\" ON \"approval_merge_request_rules\".\"merge_request_id\" = \"merge_requests\".\"id\" INNER JOIN \"approval_merge_request_rules_users\" ON \"approval_merge_request_rules_users\".\"approval_merge_request_rule_id\" = \"approval_merge_request_rules\".\"id\" INNER JOIN \"users\" ON \"users\".\"id\" = \"approval_merge_request_rules_users\".\"user_id\" WHERE \"merge_requests\".\"target_project_id\" = 22 AND (\"merge_requests\".\"state\" IN ('opened')) AND \"users\".\"username\" = 'agordon' GROUP BY merge_requests.id HAVING (COUNT(users.id) = 1)\nUNION\nSELECT \"merge_requests\".* FROM \"merge_requests\" INNER JOIN \"approval_merge_request_rules\" ON \"approval_merge_request_rules\".\"merge_request_id\" = \"merge_requests\".\"id\" INNER JOIN \"approval_merge_request_rules_groups\" ON \"approval_merge_request_rules_groups\".\"approval_merge_request_rule_id\" = \"approval_merge_request_rules\".\"id\" INNER JOIN \"namespaces\" ON \"namespaces\".\"id\" = \"approval_merge_request_rules_groups\".\"group_id\" AND \"namespaces\".\"type\" IN ('Group') INNER JOIN \"members\" ON \"members\".\"source_id\" = \"namespaces\".\"id\" AND \"members\".\"type\" IN ('GroupMember') AND \"members\".\"source_type\" = 'Namespace' AND \"members\".\"requested_at\" IS NULL AND \"members\".\"source_type\" = 'Namespace' INNER JOIN \"users\" ON \"users\".\"id\" = \"members\".\"user_id\" WHERE \"merge_requests\".\"target_project_id\" = 22 AND (\"merge_requests\".\"state\" IN ('opened')) AND \"users\".\"username\" = 'agordon' GROUP BY merge_requests.id HAVING (COUNT(users.id) = 1)\nUNION\nSELECT \"merge_requests\".* FROM \"merge_requests\" INNER JOIN \"projects\" ON \"projects\".\"id\" = \"merge_requests\".\"target_project_id\" INNER JOIN \"approval_project_rules\" ON \"approval_project_rules\".\"project_id\" = \"projects\".\"id\" INNER JOIN \"approval_project_rules_users\" ON \"approval_project_rules_users\".\"approval_project_rule_id\" = \"approval_project_rules\".\"id\" INNER JOIN \"users\" ON \"users\".\"id\" = \"approval_project_rules_users\".\"user_id\" LEFT OUTER JOIN \"approval_merge_request_rules\" ON \"approval_merge_request_rules\".\"merge_request_id\" = \"merge_requests\".\"id\" WHERE \"merge_requests\".\"target_project_id\" = 22 AND (\"merge_requests\".\"state\" IN ('opened')) AND \"approval_merge_request_rules\".\"id\" IS NULL AND \"users\".\"username\" = 'agordon' GROUP BY merge_requests.id HAVING (COUNT(users.id) = 1)\nUNION\nSELECT \"merge_requests\".* FROM \"merge_requests\" INNER JOIN \"projects\" ON \"projects\".\"id\" = \"merge_requests\".\"target_project_id\" INNER JOIN \"approval_project_rules\" ON \"approval_project_rules\".\"project_id\" = \"projects\".\"id\" INNER JOIN \"approval_project_rules_groups\" ON \"approval_project_rules_groups\".\"approval_project_rule_id\" = \"approval_project_rules\".\"id\" INNER JOIN \"namespaces\" ON \"namespaces\".\"id\" = \"approval_project_rules_groups\".\"group_id\" AND \"namespaces\".\"type\" IN ('Group') INNER JOIN \"members\" ON \"members\".\"source_id\" = \"namespaces\".\"id\" AND \"members\".\"type\" IN ('GroupMember') AND \"members\".\"source_type\" = 'Namespace' AND \"members\".\"requested_at\" IS NULL AND \"members\".\"source_type\" = 'Namespace' INNER JOIN \"users\" ON \"users\".\"id\" = \"members\".\"user_id\" LEFT OUTER JOIN \"approval_merge_request_rules\" ON \"approval_merge_request_rules\".\"merge_request_id\" = \"merge_requests\".\"id\" WHERE \"merge_requests\".\"target_project_id\" = 22 AND (\"merge_requests\".\"state\" IN ('opened')) AND \"approval_merge_request_rules\".\"id\" IS NULL AND \"users\".\"username\" = 'agordon' GROUP BY merge_requests.id HAVING (COUNT(users.id) = 1)) merge_requests LEFT OUTER JOIN milestones ON merge_requests.milestone_id = milestones.id WHERE \"merge_requests\".\"target_project_id\" = 22 AND (\"merge_requests\".\"state\" IN ('opened')) GROUP BY \"merge_requests\".\"id\" ORDER BY MIN(milestones.due_date) ASC NULLS LAST, highest_priority ASC NULLS LAST, \"merge_requests\".\"id\" DESC LIMIT 20 OFFSET 0","duration":32.48,"view":0.0,"db":10.65,"time":"2019-03-25T14:15:20.083Z","params":[{"key":"scope","value":"all"},{"key":"utf8","value":"✓"},{"key":"state","value":"opened"},{"key":"approver_usernames","value":["agordon"]},{"key":"namespace_id","value":"some_group"},{"key":"project_id","value":"some_project"}],"remote_ip":"50.233.102.11","user_id":3,"username":"agordon","ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36","queue_duration":2.83,"correlation_id":"2V62BVx8Ra7"}
==> /var/log/gitlab/gitlab-rails/production.log <==
ActiveRecord::StatementInvalid (PG::GroupingError: ERROR: column "merge_requests.target_branch" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT merge_requests.*, (SELECT MIN("label_priorities"."pr...
^
: SELECT merge_requests.*, (SELECT MIN("label_priorities"."priority") FROM "labels" INNER JOIN "label_links" ON "label_links"."label_id" = "labels"."id" LEFT OUTER JOIN "label_priorities" ON "labels"."id" = "label_priorities"."label_id" WHERE (label_priorities.project_id = merge_requests.target_project_id) AND (label_links.target_id = merge_requests.id) AND "label_links"."target_type" = 'MergeRequest') AS highest_priority, MIN(milestones.due_date) FROM (SELECT "merge_requests".* FROM "merge_requests" INNER JOIN "approval_merge_request_rules" ON "approval_merge_request_rules"."merge_request_id" = "merge_requests"."id" INNER JOIN "approval_merge_request_rules_users" ON "approval_merge_request_rules_users"."approval_merge_request_rule_id" = "approval_merge_request_rules"."id" INNER JOIN "users" ON "users"."id" = "approval_merge_request_rules_users"."user_id" WHERE "merge_requests"."target_project_id" = 22 AND ("merge_requests"."state" IN ('opened')) AND "users"."username" = 'agordon' GROUP BY merge_requests.id HAVING (COUNT(users.id) = 1)
UNION
SELECT "merge_requests".* FROM "merge_requests" INNER JOIN "approval_merge_request_rules" ON "approval_merge_request_rules"."merge_request_id" = "merge_requests"."id" INNER JOIN "approval_merge_request_rules_groups" ON "approval_merge_request_rules_groups"."approval_merge_request_rule_id" = "approval_merge_request_rules"."id" INNER JOIN "namespaces" ON "namespaces"."id" = "approval_merge_request_rules_groups"."group_id" AND "namespaces"."type" IN ('Group') INNER JOIN "members" ON "members"."source_id" = "namespaces"."id" AND "members"."type" IN ('GroupMember') AND "members"."source_type" = 'Namespace' AND "members"."requested_at" IS NULL AND "members"."source_type" = 'Namespace' INNER JOIN "users" ON "users"."id" = "members"."user_id" WHERE "merge_requests"."target_project_id" = 22 AND ("merge_requests"."state" IN ('opened')) AND "users"."username" = 'agordon' GROUP BY merge_requests.id HAVING (COUNT(users.id) = 1)
UNION
SELECT "merge_requests".* FROM "merge_requests" INNER JOIN "projects" ON "projects"."id" = "merge_requests"."target_project_id" INNER JOIN "approval_project_rules" ON "approval_project_rules"."project_id" = "projects"."id" INNER JOIN "approval_project_rules_users" ON "approval_project_rules_users"."approval_project_rule_id" = "approval_project_rules"."id" INNER JOIN "users" ON "users"."id" = "approval_project_rules_users"."user_id" LEFT OUTER JOIN "approval_merge_request_rules" ON "approval_merge_request_rules"."merge_request_id" = "merge_requests"."id" WHERE "merge_requests"."target_project_id" = 22 AND ("merge_requests"."state" IN ('opened')) AND "approval_merge_request_rules"."id" IS NULL AND "users"."username" = 'agordon' GROUP BY merge_requests.id HAVING (COUNT(users.id) = 1)
UNION
SELECT "merge_requests".* FROM "merge_requests" INNER JOIN "projects" ON "projects"."id" = "merge_requests"."target_project_id" INNER JOIN "approval_project_rules" ON "approval_project_rules"."project_id" = "projects"."id" INNER JOIN "approval_project_rules_groups" ON "approval_project_rules_groups"."approval_project_rule_id" = "approval_project_rules"."id" INNER JOIN "namespaces" ON "namespaces"."id" = "approval_project_rules_groups"."group_id" AND "namespaces"."type" IN ('Group') INNER JOIN "members" ON "members"."source_id" = "namespaces"."id" AND "members"."type" IN ('GroupMember') AND "members"."source_type" = 'Namespace' AND "members"."requested_at" IS NULL AND "members"."source_type" = 'Namespace' INNER JOIN "users" ON "users"."id" = "members"."user_id" LEFT OUTER JOIN "approval_merge_request_rules" ON "approval_merge_request_rules"."merge_request_id" = "merge_requests"."id" WHERE "merge_requests"."target_project_id" = 22 AND ("merge_requests"."state" IN ('opened')) AND "approval_merge_request_rules"."id" IS NULL AND "users"."username" = 'agordon' GROUP BY merge_requests.id HAVING (COUNT(users.id) = 1)) merge_requests LEFT OUTER JOIN milestones ON merge_requests.milestone_id = milestones.id WHERE "merge_requests"."target_project_id" = 22 AND ("merge_requests"."state" IN ('opened')) GROUP BY "merge_requests"."id" ORDER BY MIN(milestones.due_date) ASC NULLS LAST, highest_priority ASC NULLS LAST, "merge_requests"."id" DESC LIMIT 20 OFFSET 0):
lib/gitlab/issuable_metadata.rb:18:in `issuable_meta_data'
app/controllers/concerns/issuable_collections.rb:44:in `set_pagination'
app/controllers/concerns/issuable_collections.rb:20:in `set_issuables_index'
lib/gitlab/i18n.rb:55:in `with_locale'
lib/gitlab/i18n.rb:61:in `with_user_locale'
app/controllers/application_controller.rb:434:in `set_locale'
lib/gitlab/middleware/rails_queue_duration.rb:27:in `call'
lib/gitlab/metrics/rack_middleware.rb:17:in `block in call'
lib/gitlab/metrics/transaction.rb:55:in `run'
lib/gitlab/metrics/rack_middleware.rb:17:in `call'
lib/gitlab/middleware/multipart.rb:103:in `call'
lib/gitlab/request_profiler/middleware.rb:16:in `call'
ee/lib/gitlab/jira/middleware.rb:17:in `call'
lib/gitlab/middleware/go.rb:20:in `call'
lib/gitlab/etag_caching/middleware.rb:13:in `call'
lib/gitlab/middleware/correlation_id.rb:16:in `block in call'
lib/gitlab/correlation_id.rb:15:in `use_id'
lib/gitlab/middleware/correlation_id.rb:15:in `call'
lib/gitlab/middleware/read_only/controller.rb:42:in `call'
lib/gitlab/middleware/read_only.rb:18:in `call'
lib/gitlab/middleware/basic_health_check.rb:25:in `call'
lib/gitlab/request_context.rb:26:in `call'
lib/gitlab/metrics/requests_rack_middleware.rb:29:in `call'
lib/gitlab/middleware/release_env.rb:13:in `call'
Output of checks
Results of GitLab environment info
Expand for output related to GitLab environment info
System information System: Ubuntu 14.04 Proxy: no Current User: git Using RVM: no Ruby Version: 2.5.3p105 Gem Version: 2.7.6 Bundler Version:1.16.6 Rake Version: 12.3.2 Redis Version: 3.2.12 Git Version: 2.18.1 Sidekiq Version:5.2.5 Go Version: unknown
GitLab information Version: 11.9.0-ee Revision: 2f3536b Directory: /opt/gitlab/embedded/service/gitlab-rails DB Adapter: postgresql DB Version: 9.6.11 URL: https://gitlab.sessionm.com HTTP Clone URL: https://gitlab.sessionm.com/some-group/some-project.git SSH Clone URL: git@gitlab.sessionm.com:some-group/some-project.git Elasticsearch: yes Geo: no Using LDAP: yes Using Omniauth: yes Omniauth Providers: github
GitLab Shell Version: 8.7.1 Repository storage paths:
- default: /mnt/efs/gitlab-data/git-data/repositories GitLab Shell path: /opt/gitlab/embedded/service/gitlab-shell Git: /opt/gitlab/embedded/bin/git
Results of GitLab application Check
Expand for output related to the GitLab application check
gitlab-shell self-check successful
Checking GitLab Shell ... Finished
Checking Gitaly ...
Gitaly: ... default ... OK
Checking Gitaly ... Finished
Checking Sidekiq ...
Sidekiq: ... Running? ... yes Number of Sidekiq processes ... 1
Checking Sidekiq ... Finished
Checking Incoming Email ...
Incoming Email: ... Reply by email is disabled in config/gitlab.yml
Checking Incoming Email ... Finished
Checking LDAP ...
LDAP: ... Server: ldapmain LDAP authentication... Success omitted for PII Checking LDAP ... Finished
Checking GitLab App ...
Git configured correctly? ... yes Database config exists? ... yes All migrations up? ... ^[yes Database contains orphaned GroupMembers? ... no GitLab config exists? ... yes GitLab config up to date? ... yes Log directory writable? ... yes Tmp directory writable? ... yes Uploads directory exists? ... yes Uploads directory has correct permissions? ... yes Uploads directory tmp has correct permissions? ... yes Init script exists? ... skipped (omnibus-gitlab has no init script) Init script up-to-date? ... skipped (omnibus-gitlab has no init script) Projects have namespace: ... 4/1 ... yes 8/3 ... yes 26/5 ... yes 20/6 ... yes 15/7 ... yes 15/8 ... yes 15/9 ... yes 43/10 ... yes 43/11 ... yes 43/12 ... yes 16/14 ... yes 43/15 ... yes 43/16 ... yes 60/22 ... yes 54/23 ... yes 4/24 ... yes 44/25 ... yes 44/26 ... yes 82/27 ... yes 81/28 ... yes 86/30 ... yes 88/31 ... yes 88/32 ... yes 88/33 ... yes 88/34 ... yes 88/35 ... yes 88/36 ... yes 88/37 ... yes 57/38 ... yes 43/39 ... yes 86/40 ... yes 93/41 ... yes 93/42 ... yes 94/44 ... yes 94/45 ... yes 96/46 ... yes 96/47 ... yes 89/48 ... yes 43/49 ... yes 4/50 ... yes 43/52 ... yes Redis version >= 2.8.0? ... yes Ruby version >= 2.3.5 ? ... yes (2.5.3) Git version >= 2.18.0 ? ... yes (2.18.1) Active users: ... 71 Elasticsearch version 5.6 - 6.x? ... yes (6.4.2)
Checking GitLab App ... Finished
Checking GitLab subtasks ... Finished
Possible fixes
- Add target branch into group by clause
- Add a test to iterate over all filters/all order by possibilities and test every permutation to prevent future issues.