summaryrefslogtreecommitdiff
path: root/app/workers/git_garbage_collect_worker.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers/git_garbage_collect_worker.rb')
-rw-r--r--app/workers/git_garbage_collect_worker.rb18
1 files changed, 16 insertions, 2 deletions
diff --git a/app/workers/git_garbage_collect_worker.rb b/app/workers/git_garbage_collect_worker.rb
index f2222c7be5e..6e4feea1b26 100644
--- a/app/workers/git_garbage_collect_worker.rb
+++ b/app/workers/git_garbage_collect_worker.rb
@@ -11,6 +11,7 @@ class GitGarbageCollectWorker # rubocop:disable Scalability/IdempotentWorker
LEASE_TIMEOUT = 86400
def perform(project_id, task = :gc, lease_key = nil, lease_uuid = nil)
+ lease_key ||= "git_gc:#{task}:#{project_id}"
project = Project.find(project_id)
active_uuid = get_lease_uuid(lease_key)
@@ -26,14 +27,20 @@ class GitGarbageCollectWorker # rubocop:disable Scalability/IdempotentWorker
task = task.to_sym
- ::Projects::GitDeduplicationService.new(project).execute if task == :gc
+ if task == :gc
+ ::Projects::GitDeduplicationService.new(project).execute
+ cleanup_orphan_lfs_file_references(project)
+ end
gitaly_call(task, project.repository.raw_repository)
# Refresh the branch cache in case garbage collection caused a ref lookup to fail
flush_ref_caches(project) if task == :gc
- project.repository.expire_statistics_caches if task != :pack_refs
+ if task != :pack_refs
+ project.repository.expire_statistics_caches
+ Projects::UpdateStatisticsService.new(project, nil, statistics: [:repository_size, :lfs_objects_size]).execute
+ end
# In case pack files are deleted, release libgit2 cache and open file
# descriptors ASAP instead of waiting for Ruby garbage collection
@@ -86,6 +93,13 @@ class GitGarbageCollectWorker # rubocop:disable Scalability/IdempotentWorker
raise Gitlab::Git::CommandError.new(e)
end
+ def cleanup_orphan_lfs_file_references(project)
+ return unless Feature.enabled?(:cleanup_lfs_during_gc, project)
+ return if Gitlab::Database.read_only? # GitGarbageCollectWorker may be run on a Geo secondary
+
+ ::Gitlab::Cleanup::OrphanLfsFileReferences.new(project, dry_run: false, logger: logger).run!
+ end
+
def flush_ref_caches(project)
project.repository.after_create_branch
project.repository.branch_names