Skip to content

Cannot Set Assignee in Boards View for self-hosted GitLab

Summary

When assigning an issue on the issue board via the issue details menu, the operation fails and produces an error popup with the text An error occurred while updating assignees. It makes no difference if you select assign yourself or assign to Unassigned the issue. If you do any of the operations again, without reloading the page, they work now.

May relate to issue Cannot Set Assignee in Boards View for self-managed GitLab with Relative URL but GitLab uses a subdomain.

Steps to reproduce

Change the assignment of an issue, using the issue board.

Reproduced on self-hosted ver. 14.9.4-ee and ver. 14.9.4 Does not happen on gitlab.com 15.0.0-pre

What is the current bug behavior?

When assigning an issue on the issue board via the issue details menu, the operation fails and produces an error popup with the text An error occurred while updating assignees.

What is the expected correct behavior?

When assigning an issue on the issue board via the issue details menu, the operation succeeds an changes the assignee of the selected ticket.

Relevant logs and/or screenshots

This gets logged to /var/log/gitlab/production_json.log on a failed operation.

{
  "method": "POST",
  "path": "/api/graphql",
  "format": "*/*",
  "controller": "GraphqlController",
  "action": "execute",
  "status": 500,
  "time": "2022-05-12T14:31:26.776Z",
  "params": [
    {
      "key": "_json",
      "value": [
        {
          "operationName": "issueSetAssignees",
          "variables": "[FILTERED]",
          "query": "mutation issueSetAssignees($iid: String!, $assigneeUsernames: [String!]!, $fullPath: ID!) {\n  issuableSetAssignees: issueSetAssignees(\n    input: {iid: $iid, assigneeUsernames: $assigneeUsernames, projectPath: $fullPath}\n  ) {\n    issuable: issue {\n      id\n      assignees {\n        nodes {\n          ...User\n          ...UserAvailability\n          __typename\n        }\n        __typename\n      }\n      __typename\n    }\n    __typename\n  }\n}\n\nfragment User on User {\n  id\n  avatarUrl\n  name\n  username\n  webUrl\n  __typename\n}\n\nfragment UserAvailability on User {\n  status {\n    availability\n    __typename\n  }\n  __typename\n}\n"
        }
      ]
    },
    {
      "key": "graphql",
      "value": {
        "_json": [
          {
            "operationName": "issueSetAssignees",
            "variables": "[FILTERED]",
            "query": "mutation issueSetAssignees($iid: String!, $assigneeUsernames: [String!]!, $fullPath: ID!) {\n  issuableSetAssignees: issueSetAssignees(\n    input: {iid: $iid, assigneeUsernames: $assigneeUsernames, projectPath: $fullPath}\n  ) {\n    issuable: issue {\n      id\n      assignees {\n        nodes {\n          ...User\n          ...UserAvailability\n          __typename\n        }\n        __typename\n      }\n      __typename\n    }\n    __typename\n  }\n}\n\nfragment User on User {\n  id\n  avatarUrl\n  name\n  username\n  webUrl\n  __typename\n}\n\nfragment UserAvailability on User {\n  status {\n    availability\n    __typename\n  }\n  __typename\n}\n"
          }
        ]
      }
    }
  ],
  "correlation_id": "01G2WAX0H4HNCY2MCWVRB57W2Y",
  "meta.user": "fcio_admin",
  "meta.client_id": "user/15",
  "meta.caller_id": "GraphqlController#execute",
  "meta.remote_ip": "-------",
  "meta.feature_category": "team_planning",
  "graphql": [
    {
      "depth": 6,
      "complexity": 17,
      "used_fields": [
        "Issue.id",
        "UserCore.__typename",
        "UserStatus.availability",
        "UserStatus.__typename",
        "UserCore.status",
        "UserCore.id",
        "UserCore.avatarUrl",
        "UserCore.name",
        "UserCore.username",
        "UserCore.webUrl",
        "UserCoreConnection.nodes",
        "UserCoreConnection.__typename",
        "Issue.assignees",
        "Issue.__typename",
        "IssueSetAssigneesPayload.issue",
        "IssueSetAssigneesPayload.__typename",
        "Mutation.issueSetAssignees"
      ],
      "used_deprecated_fields": [],
      "variables": "{\"iid\"=>\"1\", \"fullPath\"=>\"fcio_admin/test\", \"assigneeUsernames\"=>[\"fcio_admin\"]}",
      "operation_name": "issueSetAssignees"
    }
  ],
  "remote_ip": "------",
  "user_id": 15,
  "username": "fcio_admin",
  "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:99.0) Gecko/20100101 Firefox/99.0",
  "queue_duration_s": 0.014299,
  "request_urgency": "low",
  "target_duration_s": 5,
  "redis_calls": 14,
  "redis_duration_s": 0.007889,
  "redis_read_bytes": 1354,
  "redis_write_bytes": 4260,
  "redis_cache_calls": 11,
  "redis_cache_duration_s": 0.006532,
  "redis_cache_read_bytes": 1024,
  "redis_cache_write_bytes": 1297,
  "redis_queues_calls": 1,
  "redis_queues_duration_s": 0.000725,
  "redis_queues_read_bytes": 44,
  "redis_queues_write_bytes": 1356,
  "redis_shared_state_calls": 1,
  "redis_shared_state_duration_s": 0.000248,
  "redis_shared_state_read_bytes": 22,
  "redis_shared_state_write_bytes": 458,
  "redis_sessions_calls": 1,
  "redis_sessions_duration_s": 0.000384,
  "redis_sessions_read_bytes": 264,
  "redis_sessions_write_bytes": 1149,
  "db_count": 63,
  "db_write_count": 18,
  "db_cached_count": 5,
  "db_replica_count": 0,
  "db_primary_count": 63,
  "db_main_count": 63,
  "db_main_replica_count": 0,
  "db_replica_cached_count": 0,
  "db_primary_cached_count": 5,
  "db_main_cached_count": 5,
  "db_main_replica_cached_count": 0,
  "db_replica_wal_count": 0,
  "db_primary_wal_count": 0,
  "db_main_wal_count": 0,
  "db_main_replica_wal_count": 0,
  "db_replica_wal_cached_count": 0,
  "db_primary_wal_cached_count": 0,
  "db_main_wal_cached_count": 0,
  "db_main_replica_wal_cached_count": 0,
  "db_replica_duration_s": 0.0,
  "db_primary_duration_s": 0.094,
  "db_main_duration_s": 0.094,
  "db_main_replica_duration_s": 0.0,
  "cpu_s": 0.503924,
  "pid": 480301,
  "exception.class": "NoMethodError",
  "exception.message": "undefined method `fetch' for nil:NilClass",
  "exception.backtrace": [
    "app/graphql/graphql_triggers.rb:5:in `issuable_assignees_updated'",
    "app/services/issues/update_service.rb:82:in `handle_assignee_changes'",
    "app/services/issues/update_service.rb:64:in `handle_changes'",
    "ee/app/services/ee/issues/update_service.rb:36:in `handle_changes'",
    "app/services/issuable_base_service.rb:314:in `update'",
    "app/services/issues/update_service.rb:23:in `update'",
    "app/services/issues/update_service.rb:17:in `execute'",
    "ee/app/services/ee/issues/update_service.rb:23:in `execute'",
    "app/graphql/mutations/concerns/mutations/assignable.rb:39:in `assign!'",
    "app/graphql/mutations/issues/set_assignees.rb:13:in `assign!'",
    "app/graphql/mutations/concerns/mutations/assignable.rb:24:in `resolve'",
    "lib/gitlab/graphql/present/field_extension.rb:18:in `resolve'",
    "lib/gitlab/graphql/tracers/timer_tracer.rb:20:in `trace'",
    "lib/gitlab/graphql/generic_tracing.rb:40:in `with_labkit_tracing'",
    "lib/gitlab/graphql/generic_tracing.rb:30:in `platform_trace'",
    "lib/gitlab/graphql/tracers/logger_tracer.rb:14:in `trace'",
    "lib/gitlab/graphql/tracers/metrics_tracer.rb:13:in `trace'",
    "lib/gitlab/graphql/tracers/application_context_tracer.rb:23:in `trace'",
    "lib/gitlab/graphql/tracers/timer_tracer.rb:20:in `trace'",
    "lib/gitlab/graphql/generic_tracing.rb:40:in `with_labkit_tracing'",
    "lib/gitlab/graphql/generic_tracing.rb:30:in `platform_trace'",
    "lib/gitlab/graphql/tracers/logger_tracer.rb:14:in `trace'",
    "lib/gitlab/graphql/tracers/metrics_tracer.rb:13:in `trace'",
    "lib/gitlab/graphql/tracers/application_context_tracer.rb:20:in `block in trace'",
    "lib/gitlab/application_context.rb:88:in `block in use'",
    "lib/gitlab/application_context.rb:88:in `use'",
    "lib/gitlab/application_context.rb:41:in `with_context'",
    "lib/gitlab/graphql/tracers/application_context_tracer.rb:19:in `trace'",
    "lib/gitlab/graphql/tracers/timer_tracer.rb:20:in `trace'",
    "lib/gitlab/graphql/generic_tracing.rb:40:in `with_labkit_tracing'",
    "lib/gitlab/graphql/generic_tracing.rb:30:in `platform_trace'",
    "lib/gitlab/graphql/tracers/logger_tracer.rb:14:in `trace'",
    "lib/gitlab/graphql/tracers/metrics_tracer.rb:13:in `trace'",
    "lib/gitlab/graphql/tracers/application_context_tracer.rb:23:in `trace'",
    "app/graphql/gitlab_schema.rb:49:in `multiplex'",
    "app/controllers/graphql_controller.rb:147:in `execute_multiplex'",
    "app/controllers/graphql_controller.rb:56:in `execute'",
    "ee/lib/gitlab/ip_address_state.rb:10:in `with'",
    "ee/app/controllers/ee/application_controller.rb:45:in `set_current_ip_address'",
    "lib/gitlab/auth/current_user_mode.rb:72:in `with_current_admin'",
    "app/controllers/application_controller.rb:502:in `set_current_admin'",
    "lib/gitlab/session.rb:11:in `with_session'",
    "app/controllers/application_controller.rb:490:in `set_session_storage'",
    "lib/gitlab/i18n.rb:105:in `with_locale'",
    "lib/gitlab/i18n.rb:111:in `with_user_locale'",
    "app/controllers/application_controller.rb:484:in `set_locale'",
    "app/controllers/application_controller.rb:478:in `set_current_context'",
    "lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call'",
    "lib/gitlab/middleware/rails_queue_duration.rb:33:in `call'",
    "lib/gitlab/middleware/memory_report.rb:13:in `call'",
    "lib/gitlab/middleware/speedscope.rb:13:in `call'",
    "lib/gitlab/request_profiler/middleware.rb:17:in `call'",
    "lib/gitlab/database/load_balancing/rack_middleware.rb:23:in `call'",
    "lib/gitlab/metrics/rack_middleware.rb:16:in `block in call'",
    "lib/gitlab/metrics/web_transaction.rb:46:in `run'",
    "lib/gitlab/metrics/rack_middleware.rb:16:in `call'",
    "lib/gitlab/jira/middleware.rb:19:in `call'",
    "lib/gitlab/middleware/go.rb:20:in `call'",
    "lib/gitlab/etag_caching/middleware.rb:21:in `call'",
    "lib/gitlab/middleware/query_analyzer.rb:11:in `block in call'",
    "lib/gitlab/database/query_analyzer.rb:46:in `within'",
    "lib/gitlab/middleware/query_analyzer.rb:11:in `call'",
    "lib/gitlab/middleware/multipart.rb:173:in `call'",
    "lib/gitlab/middleware/read_only/controller.rb:50:in `call'",
    "lib/gitlab/middleware/read_only.rb:18:in `call'",
    "lib/gitlab/middleware/same_site_cookies.rb:27:in `call'",
    "lib/gitlab/middleware/handle_malformed_strings.rb:21:in `call'",
    "lib/gitlab/middleware/basic_health_check.rb:25:in `call'",
    "lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'",
    "lib/gitlab/middleware/request_context.rb:21:in `call'",
    "lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call'",
    "config/initializers/fix_local_cache_middleware.rb:11:in `call'",
    "lib/gitlab/middleware/compressed_json.rb:26:in `call'",
    "lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'",
    "lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call'",
    "lib/gitlab/metrics/requests_rack_middleware.rb:77:in `call'",
    "lib/gitlab/middleware/release_env.rb:13:in `call'"
  ],
  "db_duration_s": 0.0,
  "view_duration_s": 0.00028,
  "duration_s": 0.76995
}