Commit a8f9dbc2 authored by Robert Speicher's avatar Robert Speicher

Merge branch 'fix-mirror-worker-pending-delete-project' into 'master'

Prevent remote mirrors from failing when project is in pending_delete

We noticed on GitLab.com that remote mirrors were not even running.
UpdateAllRemoteMirrorsWorker was failing on a project that was in
pending_delete, preventing any workers from running.

Closes gitlab-org/gitlab-ce#23650

See merge request !938
parents ec7fc881 bf2b912c
...@@ -70,6 +70,7 @@ class RemoteMirror < ActiveRecord::Base ...@@ -70,6 +70,7 @@ class RemoteMirror < ActiveRecord::Base
end end
def sync def sync
return unless project
return if !enabled || update_in_progress? return if !enabled || update_in_progress?
update_failed? ? update_retry : update_start update_failed? ? update_retry : update_start
...@@ -109,6 +110,8 @@ class RemoteMirror < ActiveRecord::Base ...@@ -109,6 +110,8 @@ class RemoteMirror < ActiveRecord::Base
private private
def url_availability def url_availability
return unless project
if project.import_url == url && project.mirror? if project.import_url == url && project.mirror?
errors.add(:url, 'is already in use') errors.add(:url, 'is already in use')
end end
...@@ -128,12 +131,14 @@ class RemoteMirror < ActiveRecord::Base ...@@ -128,12 +131,14 @@ class RemoteMirror < ActiveRecord::Base
end end
def add_update_job def add_update_job
if project.repository_exists? if project && project.repository_exists?
RepositoryUpdateRemoteMirrorWorker.perform_async(self.id) RepositoryUpdateRemoteMirrorWorker.perform_async(self.id)
end end
end end
def refresh_remote def refresh_remote
return unless project
project.repository.remove_remote(ref_name) project.repository.remove_remote(ref_name)
project.repository.add_remote(ref_name, url) project.repository.add_remote(ref_name, url)
end end
......
...@@ -84,6 +84,24 @@ describe RemoteMirror do ...@@ -84,6 +84,24 @@ describe RemoteMirror do
end end
end end
context 'no project' do
it 'includes mirror with a project in pending_delete' do
mirror = create_mirror(url: 'http://cantbeblank',
update_status: 'finished',
enabled: true,
last_update_at: nil,
updated_at: 25.hours.ago)
project = mirror.project
project.pending_delete = true
project.save
mirror.reload
expect(mirror.sync).to be_nil
expect(mirror.valid?).to be_truthy
expect(mirror.update_status).to eq('finished')
end
end
def create_mirror(params) def create_mirror(params)
project = FactoryGirl.create(:project) project = FactoryGirl.create(:project)
project.remote_mirrors.create!(params) project.remote_mirrors.create!(params)
......
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