summaryrefslogtreecommitdiff
path: root/app/workers
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-02-03 11:35:56 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-02-03 11:35:56 +0000
commit33bbb6aa7b6369fea0037f3d8a9243824e48f64f (patch)
tree18ae1428e70ddcfe1115f355ebdad6ad6f0a6e56 /app/workers
parent41fd6d4d38aaef723e501ff3ab38ae63e31d4efb (diff)
downloadgitlab-ce-33bbb6aa7b6369fea0037f3d8a9243824e48f64f.tar.gz
Add latest changes from gitlab-org/security/gitlab@14-7-stable-ee
Diffstat (limited to 'app/workers')
-rw-r--r--app/workers/all_queues.yml9
-rw-r--r--app/workers/concerns/packages/cleanup_artifact_worker.rb16
-rw-r--r--app/workers/packages/cleanup_package_file_worker.rb8
-rw-r--r--app/workers/packages/mark_package_files_for_destruction_worker.rb25
4 files changed, 54 insertions, 4 deletions
diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml
index 14fa6599073..239b66bdeb0 100644
--- a/app/workers/all_queues.yml
+++ b/app/workers/all_queues.yml
@@ -1384,6 +1384,15 @@
:weight: 1
:idempotent: true
:tags: []
+- :name: package_cleanup:packages_mark_package_files_for_destruction
+ :worker_name: Packages::MarkPackageFilesForDestructionWorker
+ :feature_category: :package_registry
+ :has_external_dependencies:
+ :urgency: :low
+ :resource_boundary: :unknown
+ :weight: 1
+ :idempotent: true
+ :tags: []
- :name: package_repositories:packages_debian_generate_distribution
:worker_name: Packages::Debian::GenerateDistributionWorker
:feature_category: :package_registry
diff --git a/app/workers/concerns/packages/cleanup_artifact_worker.rb b/app/workers/concerns/packages/cleanup_artifact_worker.rb
index db6c7330ea3..d4ad023b4a8 100644
--- a/app/workers/concerns/packages/cleanup_artifact_worker.rb
+++ b/app/workers/concerns/packages/cleanup_artifact_worker.rb
@@ -9,11 +9,15 @@ module Packages
def perform_work
return unless artifact
- log_metadata(artifact)
+ artifact.transaction do
+ log_metadata(artifact)
- artifact.destroy!
- rescue StandardError
- artifact&.error!
+ artifact.destroy!
+ rescue StandardError
+ artifact&.error!
+ end
+
+ after_destroy
end
def remaining_work_count
@@ -34,6 +38,10 @@ module Packages
raise NotImplementedError
end
+ def after_destroy
+ # no op
+ end
+
def artifact
strong_memoize(:artifact) do
model.transaction do
diff --git a/app/workers/packages/cleanup_package_file_worker.rb b/app/workers/packages/cleanup_package_file_worker.rb
index cb2b2a12c5e..f188017ee7a 100644
--- a/app/workers/packages/cleanup_package_file_worker.rb
+++ b/app/workers/packages/cleanup_package_file_worker.rb
@@ -19,6 +19,14 @@ module Packages
private
+ def after_destroy
+ pkg = artifact.package
+
+ pkg.transaction do
+ pkg.destroy if model.for_package_ids(pkg.id).empty?
+ end
+ end
+
def model
Packages::PackageFile
end
diff --git a/app/workers/packages/mark_package_files_for_destruction_worker.rb b/app/workers/packages/mark_package_files_for_destruction_worker.rb
new file mode 100644
index 00000000000..d8e52202841
--- /dev/null
+++ b/app/workers/packages/mark_package_files_for_destruction_worker.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+module Packages
+ class MarkPackageFilesForDestructionWorker
+ include ApplicationWorker
+
+ data_consistency :sticky
+ queue_namespace :package_cleanup
+ feature_category :package_registry
+ urgency :low
+ deduplicate :until_executing, including_scheduled: true
+ idempotent!
+
+ sidekiq_options retry: 3
+
+ def perform(package_id)
+ package = ::Packages::Package.find_by_id(package_id)
+
+ return unless package
+
+ ::Packages::MarkPackageFilesForDestructionService.new(package.package_files)
+ .execute
+ end
+ end
+end