]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Cleanup in backup reset status
authorLisaLi <xiaoyan.li@intel.com>
Wed, 18 Nov 2015 04:58:11 +0000 (04:58 +0000)
committerLisaLi <xiaoyan.li@intel.com>
Wed, 6 Jan 2016 01:50:45 +0000 (09:50 +0800)
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

cinder/backup/manager.py
cinder/tests/unit/test_backup.py

index 6bcd33a7421d0d5d6eefdd4850584c8a1df8fabd..46383d9b47448d6206a1f96087d6169e180969d0 100644 (file)
@@ -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')
index 18d0c507e5d1f18caac170fedaabc834f251a72f..c7c4b78958a8b1608ee7a699e0ce01ecc026d015 100644 (file)
@@ -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'])