diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-11-14 21:11:06 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-11-14 21:11:06 +0300 |
commit | 3244feeb4f1980251fd9ff6cc263e34072fbf7c7 (patch) | |
tree | 3b534fea55ea5ccfe61f1e9d65b4460db165b111 /app/workers | |
parent | 2d80ade70258fa78e9ada2e8b3055129a69654f3 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/workers')
-rw-r--r-- | app/workers/all_queues.yml | 9 | ||||
-rw-r--r-- | app/workers/container_registry/cleanup_worker.rb | 59 | ||||
-rw-r--r-- | app/workers/pages_worker.rb | 2 |
3 files changed, 69 insertions, 1 deletions
diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml index e03fbf6b44e..862842440a6 100644 --- a/app/workers/all_queues.yml +++ b/app/workers/all_queues.yml @@ -291,6 +291,15 @@ :weight: 1 :idempotent: false :tags: [] +- :name: cronjob:container_registry_cleanup + :worker_name: ContainerRegistry::CleanupWorker + :feature_category: :container_registry + :has_external_dependencies: false + :urgency: :low + :resource_boundary: :unknown + :weight: 1 + :idempotent: true + :tags: [] - :name: cronjob:container_registry_migration_enqueuer :worker_name: ContainerRegistry::Migration::EnqueuerWorker :feature_category: :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 diff --git a/app/workers/pages_worker.rb b/app/workers/pages_worker.rb index 3aff4b42629..adb6d38fd12 100644 --- a/app/workers/pages_worker.rb +++ b/app/workers/pages_worker.rb @@ -11,7 +11,7 @@ class PagesWorker # rubocop:disable Scalability/IdempotentWorker worker_resource_boundary :cpu def perform(action, *arg) - send(action, *arg) # rubocop:disable GitlabSecurity/PublicSend + deploy(*arg) if action == 'deploy' end def deploy(build_id) |