From: LisaLi Date: Wed, 18 Nov 2015 04:58:11 +0000 (+0000) Subject: Cleanup in backup reset status X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=0cf0b6ee8c8ce5b4b82647e36d4d65bc0192edaa;p=openstack-build%2Fcinder-build.git Cleanup in backup reset status Currently when resetting status of a backup to error state, it just changes the state. This fix is to add the cleanup work to remove the temporary volumes and snapshots. Change-Id: I716a7e6067f5fc0f90623822a40e532af80bae44 Closes-Bug: #1517297 --- diff --git a/cinder/backup/manager.py b/cinder/backup/manager.py index 6bcd33a74..46383d9b4 100644 --- a/cinder/backup/manager.py +++ b/cinder/backup/manager.py @@ -855,6 +855,15 @@ class BackupManager(manager.SchedulerDependentManager): raise exception.BackupVerifyUnsupportedDriver( reason=msg) + # Needs to clean temporary volumes and snapshots. + try: + self._cleanup_temp_volumes_snapshots_for_one_backup( + context, backup) + except Exception: + LOG.exception(_LE("Problem cleaning temp volumes and " + "snapshots for backup %(bkup)s."), + {'bkup': backup.id}) + # send notification to ceilometer notifier_info = {'id': backup.id, 'update': {'status': status}} notifier = rpc.get_notifier('backupStatusUpdate') diff --git a/cinder/tests/unit/test_backup.py b/cinder/tests/unit/test_backup.py index 18d0c507e..c7c4b7895 100644 --- a/cinder/tests/unit/test_backup.py +++ b/cinder/tests/unit/test_backup.py @@ -1095,8 +1095,10 @@ class BackupTestCaseWithVerify(BaseBackupTest): backup = db.backup_get(self.ctxt, imported_record.id) self.assertEqual(fields.BackupStatus.ERROR, backup['status']) + @mock.patch.object(manager.BackupManager, + '_cleanup_temp_volumes_snapshots_for_one_backup') def test_backup_reset_status_from_nonrestoring_to_available( - self): + self, mock_clean_temp): vol_id = self._create_volume_db_entry(status='available', size=1) backup = self._create_backup_db_entry(status=fields.BackupStatus.ERROR, @@ -1109,6 +1111,7 @@ class BackupTestCaseWithVerify(BaseBackupTest): self.backup_mgr.reset_status(self.ctxt, backup, fields.BackupStatus.AVAILABLE) + mock_clean_temp.assert_called_once_with(self.ctxt, backup) backup = db.backup_get(self.ctxt, backup.id) self.assertEqual(fields.BackupStatus.AVAILABLE, backup['status']) @@ -1138,7 +1141,10 @@ class BackupTestCaseWithVerify(BaseBackupTest): backup = db.backup_get(self.ctxt, backup.id) self.assertEqual(fields.BackupStatus.ERROR, backup['status']) - def test_backup_reset_status_from_restoring_to_available(self): + @mock.patch.object(manager.BackupManager, + '_cleanup_temp_volumes_snapshots_for_one_backup') + def test_backup_reset_status_from_restoring_to_available( + self, mock_clean_temp): volume = db.volume_create(self.ctxt, {'status': 'available', 'host': 'test', @@ -1150,10 +1156,13 @@ class BackupTestCaseWithVerify(BaseBackupTest): self.backup_mgr.reset_status(self.ctxt, backup, fields.BackupStatus.AVAILABLE) + mock_clean_temp.assert_called_once_with(self.ctxt, backup) backup = db.backup_get(self.ctxt, backup.id) self.assertEqual(fields.BackupStatus.AVAILABLE, backup['status']) - def test_backup_reset_status_to_error(self): + @mock.patch.object(manager.BackupManager, + '_cleanup_temp_volumes_snapshots_for_one_backup') + def test_backup_reset_status_to_error(self, mock_clean_temp): volume = db.volume_create(self.ctxt, {'status': 'available', 'host': 'test', @@ -1164,6 +1173,7 @@ class BackupTestCaseWithVerify(BaseBackupTest): volume_id=volume['id']) self.backup_mgr.reset_status(self.ctxt, backup, fields.BackupStatus.ERROR) + mock_clean_temp.assert_called_once_with(self.ctxt, backup) backup = db.backup_get(self.ctxt, backup['id']) self.assertEqual(fields.BackupStatus.ERROR, backup['status'])