Commit c01c487c authored by Lin Jen-Shin's avatar Lin Jen-Shin

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
parents da319587 e03602e0
...@@ -2039,6 +2039,10 @@ class Project < ActiveRecord::Base ...@@ -2039,6 +2039,10 @@ class Project < ActiveRecord::Base
pool_repository&.unlink_repository(repository) && update_column(:pool_repository_id, nil) pool_repository&.unlink_repository(repository) && update_column(:pool_repository_id, nil)
end end
def link_pool_repository
pool_repository&.link_repository(repository)
end
private private
def merge_requests_allowing_collaboration(source_branch = nil) def merge_requests_allowing_collaboration(source_branch = nil)
......
...@@ -23,6 +23,7 @@ class GitGarbageCollectWorker ...@@ -23,6 +23,7 @@ class GitGarbageCollectWorker
end end
task = task.to_sym task = task.to_sym
project.link_pool_repository
gitaly_call(task, project.repository.raw_repository) gitaly_call(task, project.repository.raw_repository)
# Refresh the branch cache in case garbage collection caused a ref lookup to fail # Refresh the branch cache in case garbage collection caused a ref lookup to fail
......
...@@ -5,14 +5,13 @@ module ObjectPool ...@@ -5,14 +5,13 @@ module ObjectPool
include ApplicationWorker include ApplicationWorker
include ObjectPoolQueue include ObjectPoolQueue
def perform(pool_id, project_id) # The use of pool id is deprecated. Keeping the argument allows old jobs to
pool = PoolRepository.find_by_id(pool_id) # still be performed.
return unless pool&.joinable? def perform(_pool_id, project_id)
project = Project.find_by_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 Projects::HousekeepingService.new(project).execute
end end
......
...@@ -71,6 +71,17 @@ describe GitGarbageCollectWorker do ...@@ -71,6 +71,17 @@ describe GitGarbageCollectWorker do
subject.perform(project.id) subject.perform(project.id)
end 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 end
context 'when no lease can be obtained' do context 'when no lease can be obtained' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment