diff options
author | Grzegorz Bizon <grzegorz@gitlab.com> | 2019-01-25 13:24:35 +0000 |
---|---|---|
committer | Grzegorz Bizon <grzegorz@gitlab.com> | 2019-01-25 13:24:35 +0000 |
commit | dc6091876d1c70e25f2153d24dbe04f8b4b875a9 (patch) | |
tree | 4c5bc9ec686a9ebf44db55171381aba6572f1d5f /app/workers | |
parent | dfa31d5f2fa4a6c71c992710b9d1786707b4c912 (diff) | |
parent | 99689c83d1c08cc7a7406e89809ac592acbf058a (diff) | |
download | gitlab-ce-dc6091876d1c70e25f2153d24dbe04f8b4b875a9.tar.gz |
Merge branch 'container-repository-cleanup-api' into 'master'
Container repository cleanup API
Closes #55978
See merge request gitlab-org/gitlab-ce!24303
Diffstat (limited to 'app/workers')
-rw-r--r-- | app/workers/all_queues.yml | 4 | ||||
-rw-r--r-- | app/workers/cleanup_container_repository_worker.rb | 53 | ||||
-rw-r--r-- | app/workers/delete_container_repository_worker.rb | 2 |
3 files changed, 58 insertions, 1 deletions
diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml index 223ddc80c88..4a306fc7a26 100644 --- a/app/workers/all_queues.yml +++ b/app/workers/all_queues.yml @@ -90,13 +90,15 @@ - object_pool:object_pool_join - object_pool:object_pool_destroy +- container_repository:delete_container_repository +- container_repository:cleanup_container_repository + - default - mailers # ActionMailer::DeliveryJob.queue_name - authorized_projects - background_migration - create_gpg_signature -- delete_container_repository - delete_merged_branches - delete_user - email_receiver diff --git a/app/workers/cleanup_container_repository_worker.rb b/app/workers/cleanup_container_repository_worker.rb new file mode 100644 index 00000000000..974ee8c8146 --- /dev/null +++ b/app/workers/cleanup_container_repository_worker.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +class CleanupContainerRepositoryWorker + include ApplicationWorker + include ExclusiveLeaseGuard + + queue_namespace :container_repository + + LEASE_TIMEOUT = 1.hour + + attr_reader :container_repository, :current_user + + def perform(current_user_id, container_repository_id, params) + @current_user = User.find_by_id(current_user_id) + @container_repository = ContainerRepository.find_by_id(container_repository_id) + + return unless valid? + + try_obtain_lease do + Projects::ContainerRepository::CleanupTagsService + .new(project, current_user, params) + .execute(container_repository) + end + end + + private + + def valid? + current_user && container_repository && project + end + + def project + container_repository&.project + end + + # For ExclusiveLeaseGuard concern + def lease_key + @lease_key ||= "container_repository:cleanup_tags:#{container_repository.id}" + end + + # For ExclusiveLeaseGuard concern + def lease_timeout + LEASE_TIMEOUT + end + + # For ExclusiveLeaseGuard concern + def lease_release? + # we don't allow to execute this worker + # more often than LEASE_TIMEOUT + # for given container repository + false + end +end diff --git a/app/workers/delete_container_repository_worker.rb b/app/workers/delete_container_repository_worker.rb index e8fe9d82797..42e66513ff1 100644 --- a/app/workers/delete_container_repository_worker.rb +++ b/app/workers/delete_container_repository_worker.rb @@ -4,6 +4,8 @@ class DeleteContainerRepositoryWorker include ApplicationWorker include ExclusiveLeaseGuard + queue_namespace :container_repository + LEASE_TIMEOUT = 1.hour attr_reader :container_repository |