From 3244feeb4f1980251fd9ff6cc263e34072fbf7c7 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 14 Nov 2022 18:11:06 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- app/workers/container_registry/cleanup_worker.rb | 59 ++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 app/workers/container_registry/cleanup_worker.rb (limited to 'app/workers/container_registry') diff --git a/app/workers/container_registry/cleanup_worker.rb b/app/workers/container_registry/cleanup_worker.rb new file mode 100644 index 00000000000..8350ae3431b --- /dev/null +++ b/app/workers/container_registry/cleanup_worker.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +module ContainerRegistry + class CleanupWorker + include ApplicationWorker + # we don't have any project, user or group context here + include CronjobQueue # rubocop:disable Scalability/CronWorkerContext + + data_consistency :always + idempotent! + + feature_category :container_registry + + STALE_DELETE_THRESHOLD = 30.minutes.freeze + BATCH_SIZE = 200 + + def perform + return unless Feature.enabled?(:container_registry_delete_repository_with_cron_worker) + + log_counts + + reset_stale_deletes + + enqueue_delete_container_repository_jobs if ContainerRepository.delete_scheduled.exists? + end + + private + + def reset_stale_deletes + ContainerRepository.delete_ongoing.each_batch(of: BATCH_SIZE) do |batch| + batch.with_stale_delete_at(STALE_DELETE_THRESHOLD.ago).update_all( + status: :delete_scheduled, + delete_started_at: nil + ) + end + end + + def enqueue_delete_container_repository_jobs + ContainerRegistry::DeleteContainerRepositoryWorker.perform_with_capacity + end + + def log_counts + ::Gitlab::Database::LoadBalancing::Session.current.use_replicas_for_read_queries do + log_extra_metadata_on_done( + :delete_scheduled_container_repositories_count, + ContainerRepository.delete_scheduled.count + ) + log_extra_metadata_on_done( + :stale_delete_container_repositories_count, + stale_delete_container_repositories.count + ) + end + end + + def stale_delete_container_repositories + ContainerRepository.delete_ongoing.with_stale_delete_at(STALE_DELETE_THRESHOLD.ago) + end + end +end -- cgit v1.2.3