diff options
Diffstat (limited to 'app/workers/projects')
-rw-r--r-- | app/workers/projects/git_garbage_collect_worker.rb | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/app/workers/projects/git_garbage_collect_worker.rb b/app/workers/projects/git_garbage_collect_worker.rb new file mode 100644 index 00000000000..4f908529b34 --- /dev/null +++ b/app/workers/projects/git_garbage_collect_worker.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +module Projects + class GitGarbageCollectWorker # rubocop:disable Scalability/IdempotentWorker + extend ::Gitlab::Utils::Override + include GitGarbageCollectMethods + + private + + override :find_resource + def find_resource(id) + Project.find(id) + end + + override :before_gitaly_call + def before_gitaly_call(task, resource) + return unless gc?(task) + + ::Projects::GitDeduplicationService.new(resource).execute + cleanup_orphan_lfs_file_references(resource) + end + + def cleanup_orphan_lfs_file_references(resource) + return if Gitlab::Database.read_only? # GitGarbageCollectWorker may be run on a Geo secondary + + ::Gitlab::Cleanup::OrphanLfsFileReferences.new(resource, dry_run: false, logger: logger).run! + rescue => err + Gitlab::GitLogger.warn(message: "Cleaning up orphan LFS objects files failed", error: err.message) + Gitlab::ErrorTracking.track_and_raise_for_dev_exception(err) + end + + override :update_db_repository_statistics + def update_db_repository_statistics(resource) + Projects::UpdateStatisticsService.new(resource, nil, statistics: [:repository_size, :lfs_objects_size]).execute + end + end +end |