Too long tag values raise an error during pipeline creation
Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.
Problem to solve
Sometimes pipeline creations raise an error due to too long tags. This causes an endless spinner if the pipeline creation keeps retrying until it fails for good.
Rails error: ActiveRecord::ValueTooLong
PG error: PG::StringDataRightTruncation: ERROR: value too long for type character varying(255)
relevant lines:
lib/gitlab/ci/pipeline/chain/create.rb:15:in `block (3 levels) in perform!', app/models/concerns/ci/bulk_insertable_tags.rb:13:in `with_bulk_insert_tags', lib/gitlab/ci/pipeline/chain/create.rb:14:in `block (2 levels) in perform!', app/models/concerns/bulk_insertable_associations.rb:54:in `with_bulk_insert', lib/gitlab/ci/pipeline/chain/create.rb:13:in `block in perform!', lib/gitlab/ci/pipeline/logger.rb:33:in
kibana link: https://log.gprd.gitlab.net/app/r/s/FAocr
Proposal
We should still have a limit but we shouldn't handle the error so that the sidekiq job won't keeps retrying.
Instead we should return an error message to users and not actually raise this exception.
Impact
Low impact. As of November 18th 2024 this happened 258 times in the past 2 weeks to the same 3 users.
This would be a good community contribution or onboarding issue as it's low effort to rescue and return the error in a user friendly format instead of raising it.
Full stack trace
[lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `public_send',
lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `block in write_using_load_balancer',
lib/gitlab/database/load_balancing/load_balancer.rb:133:in `block in read_write',
lib/gitlab/database/load_balancing/load_balancer.rb:211:in `retry_with_backoff',
lib/gitlab/database/load_balancing/load_balancer.rb:122:in `read_write',
lib/gitlab/database/load_balancing/connection_proxy.rb:126:in `write_using_load_balancer',
lib/gitlab/database/load_balancing/connection_proxy.rb:61:in `block (2 levels) in <class:ConnectionProxy>',
lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `public_send',
lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `block in write_using_load_balancer',
lib/gitlab/database/load_balancing/load_balancer.rb:133:in `block in read_write',
lib/gitlab/database/load_balancing/load_balancer.rb:211:in `retry_with_backoff',
lib/gitlab/database/load_balancing/load_balancer.rb:122:in `read_write',
lib/gitlab/database/load_balancing/connection_proxy.rb:126:in `write_using_load_balancer',
lib/gitlab/database/load_balancing/connection_proxy.rb:78:in `transaction',
lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `public_send',
lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `block in write_using_load_balancer',
lib/gitlab/database/load_balancing/load_balancer.rb:133:in `block in read_write',
lib/gitlab/database/load_balancing/load_balancer.rb:211:in `retry_with_backoff',
lib/gitlab/database/load_balancing/load_balancer.rb:122:in `read_write',
lib/gitlab/database/load_balancing/connection_proxy.rb:126:in `write_using_load_balancer',
lib/gitlab/database/load_balancing/connection_proxy.rb:78:in `transaction',
lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `public_send',
lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `block in write_using_load_balancer',
lib/gitlab/database/load_balancing/load_balancer.rb:133:in `block in read_write',
lib/gitlab/database/load_balancing/load_balancer.rb:211:in `retry_with_backoff',
lib/gitlab/database/load_balancing/load_balancer.rb:122:in `read_write',
lib/gitlab/database/load_balancing/connection_proxy.rb:126:in `write_using_load_balancer',
lib/gitlab/database/load_balancing/connection_proxy.rb:78:in `transaction',
lib/gitlab/ci/pipeline/chain/create.rb:16:in `block (4 levels) in perform!',
app/models/concerns/cross_database_modification.rb:92:in `block in transaction',
lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `public_send',
lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `block in write_using_load_balancer',
lib/gitlab/database/load_balancing/load_balancer.rb:133:in `block in read_write',
lib/gitlab/database/load_balancing/load_balancer.rb:211:in `retry_with_backoff',
lib/gitlab/database/load_balancing/load_balancer.rb:122:in `read_write',
lib/gitlab/database/load_balancing/connection_proxy.rb:126:in `write_using_load_balancer',
lib/gitlab/database/load_balancing/connection_proxy.rb:78:in `transaction',
lib/gitlab/database.rb:390:in `block in transaction',
lib/gitlab/database.rb:389:in `transaction',
app/models/concerns/cross_database_modification.rb:83:in `transaction',
lib/gitlab/ci/pipeline/chain/create.rb:15:in `block (3 levels) in perform!',
app/models/concerns/ci/bulk_insertable_tags.rb:13:in `with_bulk_insert_tags',
lib/gitlab/ci/pipeline/chain/create.rb:14:in `block (2 levels) in perform!',
app/models/concerns/bulk_insertable_associations.rb:54:in `with_bulk_insert',
lib/gitlab/ci/pipeline/chain/create.rb:13:in `block in perform!',
lib/gitlab/ci/pipeline/logger.rb:33:in `instrument',
lib/gitlab/ci/pipeline/logger.rb:43:in `instrument_once_with_sql',
lib/gitlab/ci/pipeline/chain/create.rb:12:in `perform!',
lib/gitlab/ci/pipeline/chain/sequence.rb:20:in `block in build!',
lib/gitlab/ci/pipeline/chain/sequence.rb:16:in `each',
lib/gitlab/ci/pipeline/chain/sequence.rb:16:in `build!',
app/services/ci/create_pipeline_service.rb:93:in `execute',
app/services/merge_requests/create_pipeline_service.rb:17:in `create_detached_merge_request_pipeline',
app/services/merge_requests/create_pipeline_service.rb:8:in `execute',
ee/app/services/ee/merge_requests/create_pipeline_service.rb:14:in `execute',
app/workers/merge_requests/create_pipeline_worker.rb:36:in `perform',
lib/gitlab/sidekiq_middleware/skip_jobs.rb:49:in `call',
lib/gitlab/database/load_balancing/sidekiq_server_middleware.rb:29:in `call',
lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing.rb:16:in `perform',
lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job.rb:44:in `perform',
lib/gitlab/sidekiq_middleware/duplicate_jobs/server.rb:8:in `call',
lib/gitlab/sidekiq_middleware/pause_control/strategies/base.rb:31:in `perform',
lib/gitlab/sidekiq_middleware/pause_control/strategy_handler.rb:22:in `perform',
lib/gitlab/sidekiq_middleware/pause_control/server.rb:8:in `call',
lib/gitlab/sidekiq_middleware/worker_context.rb:9:in `wrap_in_optional_context',
lib/gitlab/sidekiq_middleware/worker_context/server.rb:19:in `block in call',
lib/gitlab/application_context.rb:124:in `block in use',
lib/gitlab/application_context.rb:124:in `use',
lib/gitlab/application_context.rb:62:in `with_context',
lib/gitlab/sidekiq_middleware/worker_context/server.rb:17:in `call',
lib/gitlab/sidekiq_status/server_middleware.rb:7:in `call',
lib/gitlab/sidekiq_versioning/middleware.rb:9:in `call',
lib/gitlab/sidekiq_middleware/query_analyzer.rb:7:in `block in call',
lib/gitlab/database/query_analyzer.rb:37:in `within',
lib/gitlab/sidekiq_middleware/query_analyzer.rb:7:in `call',
lib/gitlab/sidekiq_middleware/admin_mode/server.rb:14:in `call',
lib/gitlab/sidekiq_middleware/instrumentation_logger.rb:9:in `call',
lib/gitlab/sidekiq_middleware/batch_loader.rb:7:in `call',
lib/gitlab/sidekiq_middleware/extra_done_log_metadata.rb:7:in `call',
lib/gitlab/sidekiq_middleware/request_store_middleware.rb:8:in `block in call',
lib/gitlab/sidekiq_middleware/request_store_middleware.rb:7:in `call',
lib/gitlab/sidekiq_middleware/server_metrics.rb:94:in `block in call',
lib/gitlab/sidekiq_middleware/server_metrics.rb:122:in `block in instrument',
lib/gitlab/metrics/background_transaction.rb:33:in `run',
lib/gitlab/sidekiq_middleware/server_metrics.rb:122:in `instrument',
lib/gitlab/sidekiq_middleware/server_metrics.rb:93:in `call',
lib/gitlab/sidekiq_middleware/monitor.rb:10:in `block in call',
lib/gitlab/sidekiq_daemon/monitor.rb:46:in `within_job',
lib/gitlab/sidekiq_middleware/monitor.rb:9:in `call',
lib/gitlab/sidekiq_middleware/size_limiter/server.rb:13:in `call',
lib/gitlab/sidekiq_logging/structured_logger.rb:21:in `call']