gitlab-org--gitlab-foss/app/services/packages/mark_package_files_for_dest...

50 lines
1.2 KiB
Ruby

# frozen_string_literal: true
module Packages
# WARNING: ensure that permissions are verified before using this service.
class MarkPackageFilesForDestructionService
BATCH_SIZE = 500
def initialize(package_files)
@package_files = package_files
end
def execute(batch_deadline: nil, batch_size: BATCH_SIZE)
timeout = false
updates_count = 0
min_batch_size = [batch_size, BATCH_SIZE].min
@package_files.each_batch(of: min_batch_size) do |batched_package_files|
if batch_deadline && Time.zone.now > batch_deadline
timeout = true
break
end
updates_count += batched_package_files.update_all(status: :pending_destruction)
end
payload = { marked_package_files_count: updates_count }
return response_error(payload) if timeout
response_success(payload)
end
private
def response_success(payload)
ServiceResponse.success(
message: 'Package files are now pending destruction',
payload: payload
)
end
def response_error(payload)
ServiceResponse.error(
message: 'Timeout while marking package files as pending destruction',
payload: payload
)
end
end
end