18.6.2 occasionally fails with NameError: uninitialized constant Grape::Validations::Validators::Base::SingleAttributeIterator
18.6.2 occasionally fails with NameError: uninitialized constant Grape::Validations::Validators::Base::SingleAttributeIterator
This is the relevant log entry from api_json.log:
{
"time": "2026-01-27T08:13:43.152Z",
"severity": "INFO",
"duration_s": 0.00244,
"db_duration_s": 0,
"view_duration_s": 0.00244,
"status": 500,
"method": "GET",
"path": "/api/v4/projects/1140/merge_requests/197/award_emoji",
"params": [
{
"key": "per_page",
"value": "100"
},
{
"key": "page",
"value": "1"
}
],
"host": "gitlab.his.de",
"remote_ip": "10.1.100.111, 127.0.0.1",
"ua": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
"route": "/api/:version/projects/:id/merge_requests/:merge_request_iid/award_emoji",
"exception.class": "NameError",
"exception.message": "uninitialized constant Grape::Validations::Validators::Base::SingleAttributeIterator",
"exception.backtrace": [
"grape (2.0.0) lib/grape/validations/validators/base.rb:44:in `validate!'",
"grape (2.0.0) lib/grape/validations/validators/base.rb:35:in `validate'",
"grape (2.0.0) lib/grape/endpoint.rb:353:in `block (2 levels) in run_validators'",
"grape (2.0.0) lib/grape/endpoint.rb:398:in `block in validations'",
"grape (2.0.0) lib/grape/endpoint.rb:397:in `each'",
"grape (2.0.0) lib/grape/endpoint.rb:397:in `validations'",
"grape (2.0.0) lib/grape/endpoint.rb:352:in `each'",
"grape (2.0.0) lib/grape/endpoint.rb:352:in `block in run_validators'",
"activesupport (7.1.6) lib/active_support/notifications.rb:208:in `instrument'",
"grape (2.0.0) lib/grape/endpoint.rb:351:in `run_validators'",
"grape (2.0.0) lib/grape/endpoint.rb:258:in `block in run'",
"activesupport (7.1.6) lib/active_support/notifications.rb:208:in `instrument'",
"grape (2.0.0) lib/grape/endpoint.rb:240:in `run'",
"grape (2.0.0) lib/grape/endpoint.rb:316:in `block in build_stack'",
"grape (2.0.0) lib/grape/middleware/base.rb:36:in `call!'",
"grape (2.0.0) lib/grape/middleware/base.rb:29:in `call'",
"grape (2.0.0) lib/grape/middleware/base.rb:36:in `call!'",
"grape (2.0.0) lib/grape/middleware/base.rb:29:in `call'",
"lib/gitlab/middleware/ip_address.rb:14:in `block in call'",
"lib/gitlab/ip_address_state.rb:11:in `with'",
"lib/gitlab/middleware/ip_address.rb:13:in `call'",
"grape (2.0.0) lib/grape/middleware/base.rb:36:in `call!'",
"grape (2.0.0) lib/grape/middleware/base.rb:29:in `call'",
"grape (2.0.0) lib/grape/middleware/base.rb:36:in `call!'",
"grape (2.0.0) lib/grape/middleware/base.rb:29:in `call'",
"lib/api/api_guard.rb:272:in `call'",
"grape (2.0.0) lib/grape/middleware/base.rb:36:in `call!'",
"grape (2.0.0) lib/grape/middleware/base.rb:29:in `call'",
"rack-oauth2 (2.2.1) lib/rack/oauth2/server/resource.rb:20:in `_call'",
"rack-oauth2 (2.2.1) lib/rack/oauth2/server/resource/bearer.rb:8:in `_call'",
"rack-oauth2 (2.2.1) lib/rack/oauth2/server/abstract/handler.rb:17:in `call'",
"grape (2.0.0) lib/grape/middleware/error.rb:39:in `block in call!'",
"grape (2.0.0) lib/grape/middleware/error.rb:38:in `catch'",
"grape (2.0.0) lib/grape/middleware/error.rb:38:in `call!'",
"grape (2.0.0) lib/grape/middleware/base.rb:29:in `call'",
"grape_logging (1.8.4) lib/grape_logging/middleware/request_logger.rb:60:in `block in call!'",
"grape_logging (1.8.4) lib/grape_logging/middleware/request_logger.rb:58:in `catch'",
"grape_logging (1.8.4) lib/grape_logging/middleware/request_logger.rb:58:in `call!'",
"grape (2.0.0) lib/grape/middleware/base.rb:29:in `call'",
"rack (2.2.21) lib/rack/head.rb:12:in `call'",
"grape (2.0.0) lib/grape/endpoint.rb:224:in `call!'",
"grape (2.0.0) lib/grape/endpoint.rb:218:in `call'",
"grape (2.0.0) lib/grape/router/route.rb:58:in `exec'",
"grape (2.0.0) lib/grape/router.rb:120:in `process_route'",
"grape (2.0.0) lib/grape/router.rb:74:in `block in identity'",
"grape (2.0.0) lib/grape/router.rb:94:in `transaction'",
"grape (2.0.0) lib/grape/router.rb:72:in `identity'",
"grape (2.0.0) lib/grape/router.rb:56:in `block in call'",
"grape (2.0.0) lib/grape/router.rb:136:in `with_optimization'",
"grape (2.0.0) lib/grape/router.rb:55:in `call'",
"grape (2.0.0) lib/grape/api/instance.rb:165:in `call'",
"grape (2.0.0) lib/grape/api/instance.rb:70:in `call!'",
"grape (2.0.0) lib/grape/api/instance.rb:65:in `call'",
"actionpack (7.1.6) lib/action_dispatch/routing/mapper.rb:31:in `block in <class:Constraints>'",
"actionpack (7.1.6) lib/action_dispatch/routing/mapper.rb:60:in `serve'",
"actionpack (7.1.6) lib/action_dispatch/journey/router.rb:51:in `block in serve'",
"config/initializers/action_dispatch_journey_router.rb:52:in `block in find_routes'",
"config/initializers/action_dispatch_journey_router.rb:25:in `map!'",
"config/initializers/action_dispatch_journey_router.rb:25:in `find_routes'",
"actionpack (7.1.6) lib/action_dispatch/journey/router.rb:32:in `serve'",
"actionpack (7.1.6) lib/action_dispatch/routing/route_set.rb:882:in `call'",
"gitlab-experiment (1.0.0) lib/gitlab/experiment/middleware.rb:19:in `call'",
"omniauth (2.1.4) lib/omniauth/strategy.rb:202:in `call!'",
"omniauth (2.1.4) lib/omniauth/strategy.rb:169:in `call'",
"flipper (0.28.3) lib/flipper/middleware/memoizer.rb:72:in `memoized_call'",
"flipper (0.28.3) lib/flipper/middleware/memoizer.rb:37: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/go.rb:21: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:83:in `within'",
"lib/gitlab/middleware/query_analyzer.rb:11:in `call'",
"lib/ci/job_token/middleware.rb:11:in `call'",
"batch-loader (2.0.5) lib/batch_loader/middleware.rb:11:in `call'",
"rack-attack (6.8.0) lib/rack/attack.rb:105:in `call'",
"apollo_upload_server (2.1.6) lib/apollo_upload_server/middleware.rb:19:in `call'",
"lib/gitlab/middleware/multipart.rb:177:in `call'",
"lib/gitlab/middleware/rack_attack_headers.rb:42:in `call'",
"rack-attack (6.8.0) lib/rack/attack.rb:129:in `call'",
"warden (1.2.9) lib/warden/manager.rb:36:in `block in call'",
"warden (1.2.9) lib/warden/manager.rb:34:in `catch'",
"warden (1.2.9) lib/warden/manager.rb:34:in `call'",
"rack-cors (2.0.2) lib/rack/cors.rb:102:in `call'",
"rack (2.2.21) lib/rack/tempfile_reaper.rb:15:in `call'",
"rack (2.2.21) lib/rack/etag.rb:27:in `call'",
"rack (2.2.21) lib/rack/conditional_get.rb:27:in `call'",
"rack (2.2.21) lib/rack/head.rb:12:in `call'",
"actionpack (7.1.6) lib/action_dispatch/http/permissions_policy.rb:36:in `call'",
"actionpack (7.1.6) lib/action_dispatch/http/content_security_policy.rb:36:in `call'",
"lib/gitlab/middleware/read_only/controller.rb:40:in `call'",
"lib/gitlab/middleware/read_only.rb:18:in `call'",
"lib/gitlab/middleware/unauthenticated_session_expiry.rb:18:in `call'",
"rack (2.2.21) lib/rack/session/abstract/id.rb:266:in `context'",
"rack (2.2.21) lib/rack/session/abstract/id.rb:260:in `call'",
"lib/gitlab/middleware/secure_headers.rb:11:in `call'",
"actionpack (7.1.6) lib/action_dispatch/middleware/cookies.rb:689:in `call'",
"lib/gitlab/middleware/same_site_cookies.rb:27:in `call'",
"actionpack (7.1.6) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'",
"activesupport (7.1.6) lib/active_support/callbacks.rb:101:in `run_callbacks'",
"actionpack (7.1.6) lib/action_dispatch/middleware/callbacks.rb:28:in `call'",
"sentry-rails (5.23.0) lib/sentry/rails/rescued_exception_interceptor.rb:14:in `call'",
"actionpack (7.1.6) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'",
"lib/gitlab/middleware/path_traversal_check.rb:40:in `call'",
"lib/gitlab/middleware/handle_malformed_strings.rb:19:in `call'",
"lib/gitlab/middleware/json_validation.rb:165:in `call'",
"sentry-ruby (5.23.0) lib/sentry/rack/capture_exceptions.rb:30:in `block (2 levels) in call'",
"sentry-ruby (5.23.0) lib/sentry/hub.rb:299:in `with_session_tracking'",
"sentry-ruby (5.23.0) lib/sentry-ruby.rb:428:in `with_session_tracking'",
"sentry-ruby (5.23.0) lib/sentry/rack/capture_exceptions.rb:21:in `block in call'",
"sentry-ruby (5.23.0) lib/sentry/hub.rb:89:in `with_scope'",
"sentry-ruby (5.23.0) lib/sentry-ruby.rb:408:in `with_scope'",
"sentry-ruby (5.23.0) lib/sentry/rack/capture_exceptions.rb:20:in `call'",
"actionpack (7.1.6) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'",
"lib/gitlab/middleware/basic_health_check.rb:25:in `call'",
"lograge (0.11.2) lib/lograge/rails_ext/rack/logger.rb:15:in `call_app'",
"railties (7.1.6) lib/rails/rack/logger.rb:24:in `block in call'",
"activesupport (7.1.6) lib/active_support/tagged_logging.rb:139:in `block in tagged'",
"activesupport (7.1.6) lib/active_support/tagged_logging.rb:39:in `tagged'",
"activesupport (7.1.6) lib/active_support/tagged_logging.rb:139:in `tagged'",
"activesupport (7.1.6) lib/active_support/broadcast_logger.rb:241:in `method_missing'",
"railties (7.1.6) lib/rails/rack/logger.rb:24:in `call'",
"actionpack (7.1.6) lib/action_dispatch/middleware/remote_ip.rb:92: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'",
"request_store (1.7.0) lib/request_store/middleware.rb:19:in `call'",
"rack (2.2.21) lib/rack/method_override.rb:24:in `call'",
"rack (2.2.21) lib/rack/runtime.rb:22:in `call'",
"rack-timeout (0.7.0) lib/rack/timeout/core.rb:154:in `block in call'",
"rack-timeout (0.7.0) lib/rack/timeout/support/timeout.rb:19:in `timeout'",
"rack-timeout (0.7.0) lib/rack/timeout/core.rb:153:in `call'",
"config/initializers/fix_local_cache_middleware.rb:11:in `call'",
"lib/gitlab/middleware/compressed_json.rb:44:in `call'",
"actionpack (7.1.6) lib/action_dispatch/middleware/executor.rb:14:in `call'",
"lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'",
"rack (2.2.21) lib/rack/sendfile.rb:127:in `call'",
"lib/gitlab/middleware/sidekiq_web_static.rb:28:in `call'",
"lib/gitlab/metrics/requests_rack_middleware.rb:83:in `call'",
"gitlab-labkit (0.42.2) lib/labkit/middleware/rack.rb:22:in `block in call'",
"gitlab-labkit (0.42.2) lib/labkit/context.rb:43:in `with_context'",
"gitlab-labkit (0.42.2) lib/labkit/middleware/rack.rb:21:in `call'",
"actionpack (7.1.6) lib/action_dispatch/middleware/request_id.rb:28:in `call'",
"lib/gitlab/middleware/cors_static_assets.rb:19:in `call'",
"railties (7.1.6) lib/rails/engine.rb:536:in `call'",
"railties (7.1.6) lib/rails/railtie.rb:226:in `public_send'",
"railties (7.1.6) lib/rails/railtie.rb:226:in `method_missing'",
"lib/gitlab/middleware/release_env.rb:12:in `call'",
"rack (2.2.21) lib/rack/urlmap.rb:74:in `block in call'",
"rack (2.2.21) lib/rack/urlmap.rb:58:in `each'",
"rack (2.2.21) lib/rack/urlmap.rb:58:in `call'",
"puma (6.6.1) lib/puma/configuration.rb:279:in `call'",
"puma (6.6.1) lib/puma/request.rb:99:in `block in handle_request'",
"puma (6.6.1) lib/puma/thread_pool.rb:390:in `with_force_shutdown'",
"puma (6.6.1) lib/puma/request.rb:98:in `handle_request'",
"puma (6.6.1) lib/puma/server.rb:472:in `process_client'",
"puma (6.6.1) lib/puma/server.rb:254:in `block in run'",
"puma (6.6.1) lib/puma/thread_pool.rb:167:in `block in spawn_thread'"
],
"redis_calls": 5,
"redis_allowed_cross_slot_calls": 1,
"redis_duration_s": 0.000519,
"redis_read_bytes": 279,
"redis_write_bytes": 751,
"redis_db_load_balancing_calls": 2,
"redis_db_load_balancing_duration_s": 0.000133,
"redis_db_load_balancing_write_bytes": 106,
"redis_sessions_calls": 3,
"redis_sessions_allowed_cross_slot_calls": 1,
"redis_sessions_duration_s": 0.000386,
"redis_sessions_read_bytes": 279,
"redis_sessions_write_bytes": 645,
"db_count": 1,
"db_write_count": 0,
"db_cached_count": 0,
"db_txn_count": 0,
"db_replica_txn_count": 0,
"db_primary_txn_count": 0,
"db_replica_count": 0,
"db_primary_count": 1,
"db_replica_write_count": 0,
"db_primary_write_count": 0,
"db_replica_cached_count": 0,
"db_primary_cached_count": 0,
"db_replica_wal_count": 0,
"db_primary_wal_count": 0,
"db_replica_wal_cached_count": 0,
"db_primary_wal_cached_count": 0,
"db_replica_txn_max_duration_s": 0,
"db_primary_txn_max_duration_s": 0,
"db_replica_txn_duration_s": 0,
"db_primary_txn_duration_s": 0,
"db_replica_duration_s": 0,
"db_primary_duration_s": 0.001,
"db_main_txn_count": 0,
"db_ci_txn_count": 0,
"db_main_replica_txn_count": 0,
"db_ci_replica_txn_count": 0,
"db_main_count": 1,
"db_ci_count": 0,
"db_main_replica_count": 0,
"db_ci_replica_count": 0,
"db_main_write_count": 0,
"db_ci_write_count": 0,
"db_main_replica_write_count": 0,
"db_ci_replica_write_count": 0,
"db_main_cached_count": 0,
"db_ci_cached_count": 0,
"db_main_replica_cached_count": 0,
"db_ci_replica_cached_count": 0,
"db_main_wal_count": 0,
"db_ci_wal_count": 0,
"db_main_replica_wal_count": 0,
"db_ci_replica_wal_count": 0,
"db_main_wal_cached_count": 0,
"db_ci_wal_cached_count": 0,
"db_main_replica_wal_cached_count": 0,
"db_ci_replica_wal_cached_count": 0,
"db_main_txn_max_duration_s": 0,
"db_ci_txn_max_duration_s": 0,
"db_main_replica_txn_max_duration_s": 0,
"db_ci_replica_txn_max_duration_s": 0,
"db_main_txn_duration_s": 0,
"db_ci_txn_duration_s": 0,
"db_main_replica_txn_duration_s": 0,
"db_ci_replica_txn_duration_s": 0,
"db_main_duration_s": 0.001,
"db_ci_duration_s": 0,
"db_main_replica_duration_s": 0,
"db_ci_replica_duration_s": 0,
"path_traversal_check_duration_s": 0.000244,
"cpu_s": 0.015407,
"mem_objects": 9891,
"mem_bytes": 674808,
"mem_mallocs": 2503,
"mem_total_bytes": 1070448,
"pid": 2899560,
"worker_id": "puma_2",
"rate_limiting_gates": [],
"correlation_id": "01KFZ880TYH9X2PXP2Y8SXGHJB",
"meta.caller_id": "GET /api/:version/projects/:id/merge_requests/:merge_request_iid/award_emoji",
"meta.remote_ip": "10.1.100.111",
"meta.feature_category": "code_review_workflow",
"meta.client_id": "ip/10.1.100.111",
"request_urgency": "default",
"target_duration_s": 1
}
The error is occasionally triggered by the following line from a pipeline script running on our Jenkins instance:
updateGitlabCommitStatus name: 'jenkins', state: 'success'
Observed Weirdness: Even though the Jenkins plugin is calling the Commit Status API, the GitLab log records a 500 error on the award_emoji route.
Edited by 🤖 GitLab Bot 🤖