Deleted `vulnerability_remediations` records leave behind `uploads` records

Problem

image

It appears on staging-ref.gitlab.com that vulnerability_remediations records were deleted, but there are uploads records still referencing them. Geo surfaces these affected uploads records during periodic verification of data. Errors are generated when attempting to access the uploaded files.

Customers who use Geo for disaster recovery reasons must spend time investigating potentially missing or corrupted data to determine if it is a problem.

Details

#448498 (comment 1913350857)

irb(main):001:0> Upload.verification_failed.count
=> 725
irb(main):002:0> Upload.verification_failed.first
=> 
#<Upload:0x00007b78ec5f3580
 id: 7,
 size: 13908,
 path: "vulnerabilities/remediation/file/1/99974c3ec64a98cf7c644609e6d340f4071764e67654494035460cb9bf9d6ef4.diff",
 checksum: nil,
 model_id: 1,
 model_type: "Vulnerabilities::Remediation",
 uploader: "AttachmentUploader",
 created_at: Wed, 13 Mar 2024 18:58:18.840841000 UTC +00:00,
 store: 2,
 mount_point: "file",
 secret: nil,
 verification_checksum: nil>
irb(main):003:0> Upload.verification_failed.first.upload_state
=> 
#<Geo::UploadState:0x00007b78ec445170
 verification_started_at: Mon, 20 May 2024 21:55:09.993793000 UTC +00:00,
 verification_retry_at: Mon, 20 May 2024 22:55:54.341370000 UTC +00:00,
 verified_at: Mon, 20 May 2024 21:55:10.341422000 UTC +00:00,
 upload_id: 7,
 verification_state: 3,
 verification_retry_count: 1441,
 verification_checksum: nil,
 verification_failure: "Error during verification: undefined method `underscore' for NilClass:Class\n\n    File.join(model.class.underscore, mounted_as.to_s, model.id.to_s)\n                         ^^^^^^^^^^^">
irb(main):004:0> Upload.verification_failed.first.model
=> nil
irb(main):007:0> Upload.verification_failed.select { |u| u.model.nil? }.size
=> 725
irb(main):010:0> Upload.verification_failed.group(:model_type).count
=> {"Vulnerabilities::Remediation"=>725}
irb(main):011:0> Upload.verification_failed.order(:created_at).first.created_at
=> Wed, 13 Mar 2024 18:58:18.840841000 UTC +00:00
irb(main):012:0> Upload.verification_failed.order(:created_at).last.created_at
=> Mon, 13 May 2024 22:25:30.483615000 UTC +00:00

References

Edited by Michael Kozono