35 lines
756 B
Ruby
35 lines
756 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Environments
|
|
class AutoDeleteCronWorker
|
|
include ApplicationWorker
|
|
include ::Gitlab::LoopHelpers
|
|
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
|
|
|
|
data_consistency :always
|
|
feature_category :continuous_delivery
|
|
deduplicate :until_executed, including_scheduled: true
|
|
idempotent!
|
|
|
|
LOOP_TIMEOUT = 45.minutes
|
|
LOOP_LIMIT = 1000
|
|
BATCH_SIZE = 100
|
|
|
|
def perform
|
|
loop_until(timeout: LOOP_TIMEOUT, limit: LOOP_LIMIT) do
|
|
destroy_in_batch
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def destroy_in_batch
|
|
environments = Environment.auto_deletable(BATCH_SIZE)
|
|
|
|
return false if environments.empty?
|
|
|
|
environments.each(&:destroy)
|
|
end
|
|
end
|
|
end
|