Environments page does not show Environments

Summary

Customer filed a ticket reporting that they are not able to view a project's Environments on the Environments page; the API shows the environments as expected. Attempting to check for protected_environments in an impacted project also fails with a 500 error.

Steps to reproduce

  1. Navigate to the Environments page of an impacted project.
  2. See the welcome page in place of the list of environments.
  3. Check the environments API response for the project and verify that at least one environment is present.
  4. Call protected_environments on the same project and get a 500 Internal Server Error.

Example Project

Was not able to reproduce in a test project

What is the current bug behavior?

Unable to view project Environments

What is the expected correct behavior?

Environments should be displayed

Relevant logs and/or screenshots

This Kibana search shows impacted customers. This seems to have increased recently.

image

Stack traces from Kibana:

Accessing from /-/environments page:

ee/app/models/protected_environments/authorizable.rb:37:in `check_access',
ee/app/models/protected_environment.rb:95:in `block in accessible_to?',
ee/app/models/protected_environment.rb:95:in `accessible_to?',
ee/app/models/ee/environment.rb:138:in `block (2 levels) in protected_environment_accesses',
ee/app/models/ee/environment.rb:137:in `each',
ee/app/models/ee/environment.rb:137:in `group_by',
ee/app/models/ee/environment.rb:137:in `block in protected_environment_accesses',
lib/gitlab/safe_request_store.rb:12:in `fetch',
ee/app/models/ee/environment.rb:136:in `protected_environment_accesses',
ee/app/models/ee/environment.rb:76:in `protected_from?',
ee/app/policies/ee/environment_policy.rb:8:in `block (2 levels) in <module:EnvironmentPolicy>',
app/models/ability.rb:88:in `allowed?',
lib/gitlab/allowable.rb:6:in `can?',
app/serializers/environment_entity.rb:86:in `can_update_environment?',
app/serializers/environment_entity.rb:42:in `block in <class:EnvironmentEntity>',
app/serializers/base_serializer.rb:16:in `represent',
app/serializers/concerns/with_pagination.rb:21:in `represent',
app/serializers/environment_serializer.rb:23:in `block in represent',
app/serializers/environment_serializer.rb:20:in `map',
app/serializers/environment_serializer.rb:20:in `represent',
app/controllers/projects/environments_controller.rb:289:in `serialize_environments',
app/controllers/projects/environments_controller.rb:56:in `block (2 levels) in index',
app/controllers/projects/environments_controller.rb:48:in `index',
ee/lib/gitlab/ip_address_state.rb:10:in `with',
ee/app/controllers/ee/application_controller.rb:45:in `set_current_ip_address',
app/controllers/application_controller.rb:500:in `set_current_admin',
lib/gitlab/session.rb:11:in `with_session',
app/controllers/application_controller.rb:491:in `set_session_storage',
lib/gitlab/i18n.rb:107:in `with_locale',
lib/gitlab/i18n.rb:113:in `with_user_locale',
app/controllers/application_controller.rb:482:in `set_locale',
app/controllers/application_controller.rb:475:in `set_current_context',
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/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/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:33:in `call',
lib/gitlab/middleware/query_analyzer.rb:11:in `block in call',
lib/gitlab/database/query_analyzer.rb:37: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/basic_health_check.rb:25:in `call',
lib/gitlab/middleware/handle_malformed_strings.rb:21: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:45: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:13:in `call'

Query protected_environments via API:

ee/app/models/protected_environments/authorizable.rb:71:in `humanize',
lib/api/entities/protected_ref_access.rb:10:in `block in <class:ProtectedRefAccess>',
lib/gitlab/json.rb:130:in `dump',
lib/gitlab/json.rb:130:in `adapter_dump',
lib/gitlab/json.rb:52:in `dump',
lib/gitlab/json.rb:194:in `call',
ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call',
ee/lib/gitlab/ip_address_state.rb:10:in `with',
ee/lib/gitlab/middleware/ip_restrictor.rb:13:in `call',
lib/api/api_guard.rb:222: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/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/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:37: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/basic_health_check.rb:25:in `call',
lib/gitlab/middleware/handle_malformed_strings.rb:21: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:45: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:13:in `call'

Output of checks

Reproduced on GitLab Enterprise Edition 16.1.0-pre c26d3e3f

Possible fixes