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
end
def sync
return unless project
return if !enabled || update_in_progress?
update_failed? ? update_retry : update_start
......@@ -109,6 +110,8 @@ class RemoteMirror < ActiveRecord::Base
private
def url_availability
return unless project
if project.import_url == url && project.mirror?
errors.add(:url, 'is already in use')
end
......@@ -128,12 +131,14 @@ class RemoteMirror < ActiveRecord::Base
end
def add_update_job
if project.repository_exists?
if project && project.repository_exists?
RepositoryUpdateRemoteMirrorWorker.perform_async(self.id)
end
end
def refresh_remote
return unless project
project.repository.remove_remote(ref_name)
project.repository.add_remote(ref_name, url)
end
......
......@@ -84,6 +84,24 @@ describe RemoteMirror do
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)
project = FactoryGirl.create(:project)
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