"undefined method `epics'" error when rendering some content on GitLab.com
Summary
A Support team member (thanks @goeun.gil!) reported odd behaviour when trying to access a training template file located here: https://gitlab.com/gitlab-com/support/support-training/-/blob/main/.gitlab/issue_templates/Code%20Contributions.md
When loaded, it indicates an error and triggers a 500 in the backend. We can see in Kibana that this will routinely return an error, where it looks to check for epics under a UserNamespace:
# some values removed for brevity
"json": {
"meta.client_id": "user/10369602",
"db_main_replica_txn_max_duration_s": 0,
"controller": "Projects::BlobController",
"exception.cause_class": "NoMethodError",
"meta.feature_category": "source_code_management",
"exception.class": "ActionView::Template::Error",
"meta.project": "gitlab-com/support/support-training",
"meta.caller_id": "Projects::BlobController#show",
"exception.backtrace": [
"ee/lib/ee/banzai/filter/references/epic_reference_filter.rb:49:in `parent_records'",
"lib/banzai/filter/references/reference_cache.rb:152:in `block in load_records_per_parent'",
"lib/banzai/filter/references/reference_cache.rb:149:in `each'",
"lib/banzai/filter/references/reference_cache.rb:149:in `load_records_per_parent'",
"lib/banzai/filter/references/reference_cache.rb:19:in `load_reference_cache'",
"lib/banzai/filter/references/abstract_reference_filter.rb:124:in `call'",
"lib/banzai/filter/concerns/timeout_filter_handler.rb:37:in `block in call'",
"lib/gitlab/render_timeout.rb:11:in `timeout'",
"lib/banzai/filter/concerns/timeout_filter_handler.rb:37:in `call'",
"lib/banzai/filter/concerns/pipeline_timing_check.rb:26:in `call'",
"lib/banzai/filter/references/reference_filter.rb:43:in `block in call_and_update_nodes'",
"lib/banzai/filter/references/reference_filter.rb:298:in `with_update_nodes'",
"lib/banzai/filter/references/reference_filter.rb:43:in `call_and_update_nodes'",
"lib/banzai/filter/references/reference_filter.rb:31:in `call'",
"lib/banzai/pipeline/base_pipeline.rb:26:in `block (2 levels) in singleton class'",
"lib/banzai/renderer.rb:131:in `block in render_result'",
"lib/banzai/renderer.rb:221:in `instrument_filters'",
"lib/banzai/renderer.rb:129:in `render_result'",
"lib/banzai/renderer.rb:165:in `cacheless_render'",
"lib/banzai/renderer.rb:28:in `block in render'",
"lib/banzai/renderer.rb:27:in `render'",
"lib/banzai.rb:16:in `render'",
"app/services/markup/rendering_service.rb:40:in `markdown_unsafe'",
"app/services/markup/rendering_service.rb:29:in `markup_unsafe'",
"app/services/markup/rendering_service.rb:16:in `execute'",
"app/helpers/markup_helper.rb:116:in `markup'",
"app/views/projects/blob/viewers/_markup.html.haml:3",
"app/views/projects/blob/_viewer.html.haml:24",
"app/controllers/application_controller.rb:370:in `view_to_html_string'",
"app/controllers/concerns/renders_blob.rb:17:in `blob_viewer_json'",
"app/controllers/projects/blob_controller.rb:271:in `show_json'",
"app/controllers/projects/blob_controller.rb:76:in `block (2 levels) in show'",
"app/controllers/projects/blob_controller.rb:68:in `show'",
"app/controllers/application_controller.rb:554:in `block in allow_gitaly_ref_name_caching'",
"lib/gitlab/gitaly_client.rb:478:in `allow_ref_name_caching'",
"app/controllers/application_controller.rb:553:in `allow_gitaly_ref_name_caching'",
"lib/gitlab/ip_address_state.rb:11:in `with'",
"ee/app/controllers/ee/application_controller.rb:45:in `set_current_ip_address'",
"app/controllers/application_controller.rb:505:in `set_current_admin'",
"lib/gitlab/session.rb:11:in `with_session'",
"app/controllers/application_controller.rb:496:in `set_session_storage'",
"lib/gitlab/i18n.rb:114:in `with_locale'",
"lib/gitlab/i18n.rb:120:in `with_user_locale'",
"app/controllers/application_controller.rb:487:in `set_locale'",
"app/controllers/application_controller.rb:480:in `set_current_context'",
"ee/app/controllers/ee/projects/blob_controller.rb:27:in `repair_blobs_index'",
"lib/gitlab/middleware/action_controller_static_context.rb:23:in `call'",
"ee/lib/omni_auth/strategies/group_saml.rb:41:in `other_phase'",
"lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call'",
"lib/gitlab/middleware/sidekiq_shard_awareness_validation.rb:20:in `block in call'",
"lib/gitlab/sidekiq_sharding/validator.rb:42:in `enabled'",
"lib/gitlab/middleware/sidekiq_shard_awareness_validation.rb:20:in `call'",
"lib/gitlab/middleware/memory_report.rb:13:in `call'",
"lib/gitlab/middleware/speedscope.rb:13:in `call'",
"lib/gitlab/database/load_balancing/rack_middleware.rb:23:in `call'",
"lib/gitlab/middleware/rails_queue_duration.rb:33:in `call'",
"lib/gitlab/etag_caching/middleware.rb:21: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/middleware/go.rb:21:in `call'",
"lib/gitlab/middleware/query_analyzer.rb:11:in `block in call'",
"lib/gitlab/database/query_analyzer.rb:83:in `within'",
"lib/gitlab/middleware/query_analyzer.rb:11:in `call'",
"lib/ci/job_token/middleware.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/unauthenticated_session_expiry.rb:18:in `call'",
"lib/gitlab/middleware/same_site_cookies.rb:27:in `call'",
"lib/gitlab/middleware/path_traversal_check.rb:40: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:15: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:44: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:79:in `call'",
"lib/gitlab/middleware/release_env.rb:12:in `call'"
],
"exception.message": "undefined method `epics' for #<Namespaces::UserNamespace id:465491 @gitlab>",
"correlation_id": "01JF97283J5BCSDTJ56CAN1Q87",
},
Strangley, it appears to be calling ``Namespaces::UserNamespace, and referneces an id 465491` which belongs to the `@gitlab` user account: https://gitlab.com/gitlab.
We've seen this only begin to occur in the last 24 hours:
Kibana (7 days):
https://log.gprd.gitlab.net/app/r/s/gNPXR

Sentry (thanks @anton) https://new-sentry.gitlab.net/organizations/gitlab/issues/1244599/?project=3&query=is%3Aunresolved+correlation_id%3A01JF97283J5BCSDTJ56CAN1Q87&referrer=issue-stream&statsPeriod=14d&stream_index=0
Steps to reproduce
-
Go to this link and check devtools for the failed request. Capture the Correlation ID and review Kibana: https://gitlab.com/gitlab-com/support/support-training/-/blob/main/.gitlab/issue_templates/Code%20Contributions.md
-
Or on GitLab.com, create a markdown file in a project with the following content - on commit you will reproduce the error (I can't paste the raw markdown here otherwise this issue will be unviewable to the same bug, hence the image):
Example Project
As mentioned above: https://gitlab.com/gitlab-com/support/support-training/-/blob/main/.gitlab/issue_templates/Code%20Contributions.md
What is the current bug behavior?
The content cannot be rendered.
What is the expected correct behavior?
The content can be rendered
Output of checks
This bug happens on GitLab.com
Possible fixes
Is it possible that a recent change is trying to check for a user account and check epics of the user? Understandably, the error fails as a User Namespace does not have epics.

