53 lines
1.2 KiB
Ruby
53 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Ci
|
|
module PipelineArtifacts
|
|
class DestroyAllExpiredService
|
|
include ::Gitlab::LoopHelpers
|
|
include ::Gitlab::Utils::StrongMemoize
|
|
|
|
BATCH_SIZE = 100
|
|
LOOP_TIMEOUT = 5.minutes
|
|
LOOP_LIMIT = 1000
|
|
|
|
def initialize
|
|
@removed_artifacts_count = 0
|
|
end
|
|
|
|
def execute
|
|
loop_until(timeout: LOOP_TIMEOUT, limit: LOOP_LIMIT) do
|
|
destroy_artifacts_batch
|
|
end
|
|
|
|
@removed_artifacts_count
|
|
end
|
|
|
|
private
|
|
|
|
def destroy_artifacts_batch
|
|
artifacts = ::Ci::PipelineArtifact.unlocked.expired(BATCH_SIZE).to_a
|
|
return false if artifacts.empty?
|
|
|
|
artifacts.each(&:destroy!)
|
|
increment_stats(artifacts.size)
|
|
|
|
true
|
|
end
|
|
|
|
def increment_stats(size)
|
|
destroyed_artifacts_counter.increment({}, size)
|
|
@removed_artifacts_count += size
|
|
end
|
|
|
|
def destroyed_artifacts_counter
|
|
strong_memoize(:destroyed_artifacts_counter) do
|
|
name = :destroyed_pipeline_artifacts_count_total
|
|
comment = 'Counter of destroyed expired pipeline artifacts'
|
|
|
|
::Gitlab::Metrics.counter(name, comment)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|