Merge "Save the backup.service just before _run_backup"

This commit is contained in:
Zuul 2018-09-11 18:07:20 +00:00 committed by Gerrit Code Review
commit 7eb4e1d0a8
2 changed files with 27 additions and 4 deletions

View File

@ -369,7 +369,6 @@ class BackupManager(manager.ThreadPoolManager):
self._notify_about_backup_usage(context, backup, "create.start")
backup.host = self.host
backup.service = self.driver_name
backup.availability_zone = self.az
backup.save()
@ -408,9 +407,12 @@ class BackupManager(manager.ThreadPoolManager):
try:
if not self.is_working():
err = _('Create backup aborted due to backup service is down')
err = _('Create backup aborted due to backup service is down.')
self._update_backup_error(backup, err)
raise exception.InvalidBackup(reason=err)
backup.service = self.driver_name
backup.save()
updates = self._run_backup(context, backup, volume)
except Exception as err:
with excutils.save_and_reraise_exception():
@ -736,8 +738,8 @@ class BackupManager(manager.ThreadPoolManager):
self._update_backup_error(backup, err)
raise exception.InvalidBackup(reason=err)
if not self.is_working():
err = _('Delete backup is aborted due to backup service is down')
if backup.service and not self.is_working():
err = _('Delete backup is aborted due to backup service is down.')
status = fields.BackupStatus.ERROR_DELETING
self._update_backup_error(backup, err, status)
raise exception.InvalidBackup(reason=err)

View File

@ -1441,6 +1441,27 @@ class BackupsAPITestCase(test.TestCase):
backup.destroy()
@mock.patch('cinder.backup.manager.BackupManager.is_working')
@mock.patch('cinder.db.service_get_all')
def test_delete_backup_service_is_none_and_is_not_working(
self, _mock_service_get_all, _mock_backup_is_working):
_mock_service_get_all.return_value = [
{'availability_zone': 'az1', 'host': 'testhost',
'disabled': 0, 'updated_at': timeutils.utcnow(),
'uuid': 'a3a593da-7f8d-4bb7-8b4c-f2bc1e0b4824'}]
_mock_backup_is_working.return_value = False
backup = utils.create_backup(self.context,
status=fields.BackupStatus.AVAILABLE,
availability_zone='az1', host='testhost',
service=None)
req = webob.Request.blank('/v2/%s/backups/%s' % (
fake.PROJECT_ID, backup.id))
req.method = 'DELETE'
req.headers['Content-Type'] = 'application/json'
res = req.get_response(fakes.wsgi_app(
fake_auth_context=self.user_context))
self.assertEqual(http_client.ACCEPTED, res.status_int)
@mock.patch('cinder.backup.api.API._get_available_backup_service_host')
def test_restore_backup_volume_id_specified_json(
self, _mock_get_backup_host):