diff options
Diffstat (limited to 'app/workers/concerns/dependency_proxy/cleanup_worker.rb')
-rw-r--r-- | app/workers/concerns/dependency_proxy/cleanup_worker.rb | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/app/workers/concerns/dependency_proxy/cleanup_worker.rb b/app/workers/concerns/dependency_proxy/cleanup_worker.rb new file mode 100644 index 00000000000..b668634f233 --- /dev/null +++ b/app/workers/concerns/dependency_proxy/cleanup_worker.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +module DependencyProxy + module CleanupWorker + extend ActiveSupport::Concern + include Gitlab::Utils::StrongMemoize + + def perform_work + return unless artifact + + log_metadata(artifact) + + artifact.destroy! + rescue StandardError + artifact&.error! + end + + def max_running_jobs + ::Gitlab::CurrentSettings.dependency_proxy_ttl_group_policy_worker_capacity + end + + def remaining_work_count + expired_artifacts.limit(max_running_jobs + 1).count + end + + private + + def model + raise NotImplementedError + end + + def log_metadata + raise NotImplementedError + end + + def log_cleanup_item + raise NotImplementedError + end + + def artifact + strong_memoize(:artifact) do + model.transaction do + to_delete = next_item + + if to_delete + to_delete.processing! + log_cleanup_item(to_delete) + end + + to_delete + end + end + end + + def expired_artifacts + model.expired + end + + def next_item + expired_artifacts.lock_next_by(:updated_at).first + end + end +end |