Not-null constraint violation during SBoM Ingestion
Summary
A small percentage of Sbom::IngestReportsWorker
jobs are failing with this error.
PG::NotNullViolation: ERROR: null value in column "vulnerability_id" of relation "sbom_occurrences_vulnerabilities" violates not-null constraint
DETAIL: Failing row contains (53045064, 1620843290, null, 2024-04-01 12:22:17.204621+00, 2024-04-01 12:22:17.204621+00).
Backtrace:
Click to expand
activerecord (7.0.8.1) lib/active_record/connection_adapters/postgresql_adapter.rb:768:in `exec_params'
activerecord (7.0.8.1) lib/active_record/connection_adapters/postgresql_adapter.rb:768:in `block (2 levels) in exec_no_cache'
activesupport (7.0.8.1) lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
activesupport (7.0.8.1) lib/active_support/dependencies/interlock.rb:41:in `permit_concurrent_loads'
activerecord (7.0.8.1) lib/active_record/connection_adapters/postgresql_adapter.rb:767:in `block in exec_no_cache'
activesupport (7.0.8.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport (7.0.8.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
activesupport (7.0.8.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport (7.0.8.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
activerecord (7.0.8.1) lib/active_record/connection_adapters/abstract_adapter.rb:752:in `block in log'
activesupport (7.0.8.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activerecord (7.0.8.1) lib/active_record/connection_adapters/abstract_adapter.rb:743:in `log'
activerecord (7.0.8.1) lib/active_record/connection_adapters/postgresql_adapter.rb:766:in `exec_no_cache'
activerecord (7.0.8.1) lib/active_record/connection_adapters/postgresql_adapter.rb:745:in `execute_and_clear'
marginalia (1.11.1) lib/marginalia.rb:91:in `execute_and_clear_with_marginalia'
activerecord (7.0.8.1) lib/active_record/connection_adapters/postgresql/database_statements.rb:54:in `exec_query'
activerecord (7.0.8.1) lib/active_record/connection_adapters/abstract/database_statements.rb:150:in `exec_insert_all'
activerecord (7.0.8.1) lib/active_record/connection_adapters/abstract/query_cache.rb:22:in `exec_insert_all'
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:141:in `block in read_write'
lib/gitlab/database/load_balancing/load_balancer.rb:235:in `retry_with_backoff'
lib/gitlab/database/load_balancing/load_balancer.rb:130: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>'
activerecord (7.0.8.1) lib/active_record/insert_all.rb:41:in `execute'
app/models/concerns/bulk_insert_safe.rb:163:in `block (2 levels) in _bulk_insert_all!'
app/models/concerns/bulk_insert_safe.rb:157:in `each'
app/models/concerns/bulk_insert_safe.rb:157:in `each_slice'
app/models/concerns/bulk_insert_safe.rb:157:in `each'
app/models/concerns/bulk_insert_safe.rb:157:in `flat_map'
app/models/concerns/bulk_insert_safe.rb:157:in `block in _bulk_insert_all!'
app/models/concerns/cross_database_modification.rb:92:in `block in transaction'
activerecord (7.0.8.1) lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction'
activesupport (7.0.8.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport (7.0.8.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
activesupport (7.0.8.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport (7.0.8.1) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
activerecord (7.0.8.1) lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction'
activerecord (7.0.8.1) lib/active_record/connection_adapters/abstract/database_statements.rb:316: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:141:in `block in read_write'
lib/gitlab/database/load_balancing/load_balancer.rb:235:in `retry_with_backoff'
lib/gitlab/database/load_balancing/load_balancer.rb:130: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'
activerecord (7.0.8.1) lib/active_record/transactions.rb:209:in `transaction'
lib/gitlab/database.rb:359:in `block in transaction'
activesupport (7.0.8.1) lib/active_support/notifications.rb:206:in `block in instrument'
activesupport (7.0.8.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (7.0.8.1) lib/active_support/notifications.rb:206:in `instrument'
lib/gitlab/database.rb:358:in `transaction'
app/models/concerns/cross_database_modification.rb:83:in `transaction'
app/models/concerns/bulk_insert_safe.rb:156:in `_bulk_insert_all!'
app/models/concerns/bulk_insert_safe.rb:126:in `bulk_upsert!'
ee/lib/gitlab/ingestion/bulk_insertable_task.rb:96:in `bulk_upsert'
ee/lib/gitlab/ingestion/bulk_insertable_task.rb:84:in `block in return_data'
gems/gitlab-utils/lib/gitlab/utils/strong_memoize.rb:34:in `strong_memoize'
ee/lib/gitlab/ingestion/bulk_insertable_task.rb:82:in `return_data'
ee/lib/gitlab/ingestion/bulk_insertable_task.rb:72:in `execute'
ee/app/services/sbom/ingestion/tasks/base.rb:8:in `execute'
ee/app/services/sbom/ingestion/ingest_report_slice_service.rb:24:in `block in execute'
ee/app/services/sbom/ingestion/ingest_report_slice_service.rb:24:in `each'
ee/app/services/sbom/ingestion/ingest_report_slice_service.rb:24:in `execute'
ee/app/services/sbom/ingestion/ingest_report_slice_service.rb:15:in `execute'
ee/app/services/sbom/ingestion/ingest_report_service.rb:33:in `ingest_slice'
ee/app/services/sbom/ingestion/ingest_report_service.rb:20:in `block in execute'
ee/app/services/sbom/ingestion/occurrence_map_collection.rb:17:in `block in each'
ee/app/services/sbom/ingestion/occurrence_map_collection.rb:16:in `each'
ee/app/services/sbom/ingestion/occurrence_map_collection.rb:16:in `each'
ee/app/services/sbom/ingestion/ingest_report_service.rb:19:in `each_slice'
ee/app/services/sbom/ingestion/ingest_report_service.rb:19:in `each'
ee/app/services/sbom/ingestion/ingest_report_service.rb:19:in `flat_map'
ee/app/services/sbom/ingestion/ingest_report_service.rb:19:in `execute'
ee/app/services/sbom/ingestion/ingest_report_service.rb:9:in `execute'
ee/app/services/sbom/ingestion/ingest_reports_service.rb:35:in `ingest_report'
ee/app/services/sbom/ingestion/ingest_reports_service.rb:27:in `block in ingest_reports'
ee/app/services/sbom/ingestion/ingest_reports_service.rb:27:in `each'
ee/app/services/sbom/ingestion/ingest_reports_service.rb:27:in `flat_map'
ee/app/services/sbom/ingestion/ingest_reports_service.rb:27:in `ingest_reports'
ee/app/services/sbom/ingestion/ingest_reports_service.rb:15:in `execute'
ee/app/services/sbom/ingestion/ingest_reports_service.rb:7:in `execute'
ee/app/workers/sbom/ingest_reports_worker.rb:19:in `block in perform'
activesupport (7.0.8.1) lib/active_support/core_ext/object/try.rb:12:in `try'
ee/app/workers/sbom/ingest_reports_worker.rb:16:in `perform'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:210:in `execute_job'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:180:in `block (4 levels) in process'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:180:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/skip_jobs.rb:49:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/database/load_balancing/sidekiq_server_middleware.rb:29:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
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'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/concurrency_limit/middleware.rb:32:in `perform'
lib/gitlab/sidekiq_middleware/concurrency_limit/server.rb:8:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/click_house/migration_support/sidekiq_middleware.rb:7:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
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'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
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:133:in `block in use'
gitlab-labkit (0.35.1) lib/labkit/context.rb:35:in `with_context'
lib/gitlab/application_context.rb:133:in `use'
lib/gitlab/application_context.rb:66:in `with_context'
lib/gitlab/sidekiq_middleware/worker_context/server.rb:17:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_status/server_middleware.rb:7:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_versioning/middleware.rb:9:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/query_analyzer.rb:7:in `block in call'
lib/gitlab/database/query_analyzer.rb:40:in `within'
lib/gitlab/sidekiq_middleware/query_analyzer.rb:7:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/admin_mode/server.rb:14:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/instrumentation_logger.rb:9:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/batch_loader.rb:7:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/extra_done_log_metadata.rb:7:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/request_store_middleware.rb:8:in `block in call'
gems/gitlab-safe_request_store/lib/gitlab/safe_request_store.rb:66:in `enabling_request_store'
gems/gitlab-safe_request_store/lib/gitlab/safe_request_store.rb:59:in `ensure_request_store'
lib/gitlab/sidekiq_middleware/request_store_middleware.rb:7:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/server_metrics.rb:103:in `block in call'
lib/gitlab/sidekiq_middleware/server_metrics.rb:131:in `block in instrument'
lib/gitlab/metrics/background_transaction.rb:33:in `run'
lib/gitlab/sidekiq_middleware/server_metrics.rb:131:in `instrument'
lib/gitlab/sidekiq_middleware/server_metrics.rb:102:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
gitlab-labkit (0.35.1) lib/labkit/middleware/sidekiq/server.rb:21:in `block in call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:180:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
gitlab-labkit (0.35.1) lib/labkit/middleware/sidekiq/context/server.rb:16:in `block in call'
gitlab-labkit (0.35.1) lib/labkit/context.rb:35:in `with_context'
gitlab-labkit (0.35.1) lib/labkit/middleware/sidekiq/context/server.rb:15:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:173:in `invoke'
gitlab-labkit (0.35.1) lib/labkit/middleware/sidekiq/server.rb:20:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
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'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
lib/gitlab/sidekiq_middleware/size_limiter/server.rb:13:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
marginalia (1.11.1) lib/marginalia/sidekiq_instrumentation.rb:9:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
sentry-sidekiq (5.10.0) lib/sentry/sidekiq/sentry_context_middleware.rb:26:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
sentry-raven (3.1.2) lib/raven/integrations/sidekiq/cleanup_middleware.rb:7:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/metrics/tracking.rb:26:in `track'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/metrics/tracking.rb:122:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:182:in `traverse'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/middleware/chain.rb:173:in `invoke'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:179:in `block (3 levels) in process'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:140:in `block (6 levels) in dispatch'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/job_retry.rb:114:in `local'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:139:in `block (5 levels) in dispatch'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/rails.rb:16:in `block in call'
activesupport (7.0.8.1) lib/active_support/execution_wrapper.rb:92:in `wrap'
activesupport (7.0.8.1) lib/active_support/reloader.rb:72:in `block in wrap'
activesupport (7.0.8.1) lib/active_support/execution_wrapper.rb:92:in `wrap'
activesupport (7.0.8.1) lib/active_support/reloader.rb:71:in `wrap'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/rails.rb:15:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:135:in `block (4 levels) in dispatch'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:271:in `stats'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:130:in `block (3 levels) in dispatch'
lib/gitlab/sidekiq_logging/structured_logger.rb:21:in `call'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:129:in `block (2 levels) in dispatch'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/job_retry.rb:81:in `global'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:128:in `block in dispatch'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/job_logger.rb:39:in `prepare'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:127:in `dispatch'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:178:in `block (2 levels) in process'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:177:in `handle_interrupt'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:177:in `block in process'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:176:in `handle_interrupt'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:176:in `process'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:82:in `process_one'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/processor.rb:72:in `run'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/component.rb:10:in `watchdog'
vendor/gems/sidekiq-7.1.6/lib/sidekiq/component.rb:19:in `block in safe_thread'
SQL:
INSERT INTO sbom_occurrences_vulnerabilities ( sbom_occurrence_id, vulnerability_id, created_at, updated_at )
VALUES
( $1, $2, $3, $4 )
ON CONFLICT ( sbom_occurrence_id, vulnerability_id ) DO UPDATE
SET
updated_at = excluded.updated_at;
/*application:sidekiq,correlation_id:936321e84589516a97587a5718b2c01b,jid:78655baaebf9cc2415cd033a,endpoint_id:Sbom::IngestReportsWorker,db_config_name:main*/