From: Dirk Mueller Date: Thu, 29 Jan 2015 13:11:35 +0000 (+0100) Subject: RBD: Make snapshot_delete more robust X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=c776607c4305304f56e779403e1d23ad51e8dcb5;p=openstack-build%2Fcinder-build.git RBD: Make snapshot_delete more robust Since there is no equivalent of a force-snapshot-delete, the normal snapshot-delete should be more robust to also handle backend errors. In case the backend does not have the image snapshot anymore, log an info message and succeed the operation. Change-Id: I7fe0878dbc07053ac78272b6998513fafa1c36e8 Closes-Bug: #1415905 Related-Bug: #1361926 --- diff --git a/cinder/tests/unit/test_rbd.py b/cinder/tests/unit/test_rbd.py index 0cfc129c0..91eeebe7d 100644 --- a/cinder/tests/unit/test_rbd.py +++ b/cinder/tests/unit/test_rbd.py @@ -371,6 +371,19 @@ class RBDTestCase(test.TestCase): proxy.remove_snap.assert_called_with(self.snapshot_name) proxy.unprotect_snap.assert_called_with(self.snapshot_name) + @common_mocks + def test_delete_notfound_snapshot(self): + proxy = self.mock_proxy.return_value + proxy.__enter__.return_value = proxy + + proxy.unprotect_snap.side_effect = ( + self.mock_rbd.ImageNotFound) + + self.driver.delete_snapshot(self.snapshot) + + proxy.remove_snap.assert_called_with(self.snapshot_name) + proxy.unprotect_snap.assert_called_with(self.snapshot_name) + @common_mocks def test_delete_busy_snapshot(self): proxy = self.mock_proxy.return_value diff --git a/cinder/volume/drivers/rbd.py b/cinder/volume/drivers/rbd.py index c54aecbe2..1de8f3079 100644 --- a/cinder/volume/drivers/rbd.py +++ b/cinder/volume/drivers/rbd.py @@ -749,6 +749,9 @@ class RBDDriver(driver.TransferVD, driver.ExtendVD, with RBDVolumeProxy(self, volume_name) as volume: try: volume.unprotect_snap(snap_name) + except self.rbd.ImageNotFound: + LOG.info(_LI("Snapshot %s does not exist in backend."), + snap_name) except self.rbd.ImageBusy: children_list = self._get_children_info(volume, snap_name)