diff options
author | Lin Jen-Shin <godfat@godfat.org> | 2019-01-14 19:04:21 +0300 |
---|---|---|
committer | Lin Jen-Shin <godfat@godfat.org> | 2019-01-14 19:04:21 +0300 |
commit | c01c487cf0a32fb9c3c4122e714de9d397caafbc (patch) | |
tree | a22f0d26e064b9aef6b38070f9bdfaad770b59a2 | |
parent | da319587aaffd2ee228e4691f328c383cd2e28bd (diff) | |
parent | e03602e09de5d72b3bc5aee0df2a42807456a391 (diff) |
Merge branch 'zj-ensure-link-pool-repo-gc' into 'master'
Ensure pool participants are linked before GC
Closes gitaly#1354
See merge request gitlab-org/gitlab-ce!24230
-rw-r--r-- | app/models/project.rb | 4 | ||||
-rw-r--r-- | app/workers/git_garbage_collect_worker.rb | 1 | ||||
-rw-r--r-- | app/workers/object_pool/join_worker.rb | 11 | ||||
-rw-r--r-- | spec/workers/git_garbage_collect_worker_spec.rb | 11 |
4 files changed, 21 insertions, 6 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index 7ab2fc30c24..27be16720b5 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -2039,6 +2039,10 @@ class Project < ActiveRecord::Base pool_repository&.unlink_repository(repository) && update_column(:pool_repository_id, nil) end + def link_pool_repository + pool_repository&.link_repository(repository) + end + private def merge_requests_allowing_collaboration(source_branch = nil) diff --git a/app/workers/git_garbage_collect_worker.rb b/app/workers/git_garbage_collect_worker.rb index d3628b23189..b33e9b1f718 100644 --- a/app/workers/git_garbage_collect_worker.rb +++ b/app/workers/git_garbage_collect_worker.rb @@ -23,6 +23,7 @@ class GitGarbageCollectWorker end task = task.to_sym + project.link_pool_repository gitaly_call(task, project.repository.raw_repository) # Refresh the branch cache in case garbage collection caused a ref lookup to fail diff --git a/app/workers/object_pool/join_worker.rb b/app/workers/object_pool/join_worker.rb index 07676011b2a..9c5161fd55a 100644 --- a/app/workers/object_pool/join_worker.rb +++ b/app/workers/object_pool/join_worker.rb @@ -5,14 +5,13 @@ module ObjectPool include ApplicationWorker include ObjectPoolQueue - def perform(pool_id, project_id) - pool = PoolRepository.find_by_id(pool_id) - return unless pool&.joinable? - + # The use of pool id is deprecated. Keeping the argument allows old jobs to + # still be performed. + def perform(_pool_id, project_id) project = Project.find_by_id(project_id) - return unless project + return unless project&.pool_repository&.joinable? - pool.link_repository(project.repository) + project.link_pool_repository Projects::HousekeepingService.new(project).execute end diff --git a/spec/workers/git_garbage_collect_worker_spec.rb b/spec/workers/git_garbage_collect_worker_spec.rb index a159f24f876..4895a968d6e 100644 --- a/spec/workers/git_garbage_collect_worker_spec.rb +++ b/spec/workers/git_garbage_collect_worker_spec.rb @@ -71,6 +71,17 @@ describe GitGarbageCollectWorker do subject.perform(project.id) end + + context 'when the repository has joined a pool' do + let!(:pool) { create(:pool_repository, :ready) } + let(:project) { pool.source_project } + + it 'ensures the repositories are linked' do + expect_any_instance_of(PoolRepository).to receive(:link_repository).once + + subject.perform(project.id) + end + end end context 'when no lease can be obtained' do |