Fix error_deleting status in vol and snap
When an error happens deleting a volume or a snapshot the status change to "error_deleting" is not persisted in the metadata storage. The reason for this is that we were creating a new "status" attribute in cinderlib's objects instead of setting it in the existing OVO's attribute. This patch fixes this for both volumes and snapshots. Closes-Bug: #1819708 Change-Id: I69f703c1d46dc4b19120e786c43998d8e5aefb21
This commit is contained in:
parent
f9dab3d6fb
commit
fa0f5124e2
|
@ -455,9 +455,9 @@ class Volume(NamedObject):
|
|||
self.backend.driver.delete_volume(self._ovo)
|
||||
self.persistence.delete_volume(self)
|
||||
self.backend._volume_removed(self)
|
||||
self.status = 'deleted'
|
||||
self._ovo.status = 'deleted'
|
||||
except Exception:
|
||||
self.status = 'error_deleting'
|
||||
self._ovo.status = 'error_deleting'
|
||||
self.save()
|
||||
self._raise_with_resource()
|
||||
|
||||
|
@ -898,9 +898,9 @@ class Snapshot(NamedObject, LazyVolumeAttr):
|
|||
try:
|
||||
self.backend.driver.delete_snapshot(self._ovo)
|
||||
self.persistence.delete_snapshot(self)
|
||||
self.status = 'deleted'
|
||||
self._ovo.status = 'deleted'
|
||||
except Exception:
|
||||
self.status = 'error_deleting'
|
||||
self._ovo.status = 'error_deleting'
|
||||
self.save()
|
||||
self._raise_with_resource()
|
||||
if self._volume is not None and self._volume._snapshots is not None:
|
||||
|
|
|
@ -79,7 +79,7 @@ class TestSnapshot(base.BaseTest):
|
|||
self.persistence.delete_snapshot.assert_called_once_with(self.snap)
|
||||
self.assertEqual([], self.vol.snapshots)
|
||||
self.assertEqual([], self.vol._ovo.snapshots.objects)
|
||||
self.assertEqual('deleted', self.snap.status)
|
||||
self.assertEqual('deleted', self.snap._ovo.status)
|
||||
|
||||
def test_delete_error(self):
|
||||
self.backend.driver.delete_snapshot.side_effect = exception.NotFound
|
||||
|
@ -91,7 +91,7 @@ class TestSnapshot(base.BaseTest):
|
|||
self.persistence.delete_snapshot.assert_not_called()
|
||||
self.assertEqual([self.snap], self.vol.snapshots)
|
||||
self.assertEqual([self.snap._ovo], self.vol._ovo.snapshots.objects)
|
||||
self.assertEqual('error_deleting', self.snap.status)
|
||||
self.assertEqual('error_deleting', self.snap._ovo.status)
|
||||
|
||||
def test_create_volume(self):
|
||||
create_mock = self.backend.driver.create_volume_from_snapshot
|
||||
|
|
|
@ -151,14 +151,14 @@ class TestVolume(base.BaseTest):
|
|||
vol.delete()
|
||||
self.backend.driver.delete_volume.assert_called_once_with(vol._ovo)
|
||||
self.persistence.delete_volume.assert_called_once_with(vol)
|
||||
self.assertEqual('deleted', vol.status)
|
||||
self.assertEqual('deleted', vol._ovo.status)
|
||||
|
||||
def test_delete_error_with_snaps(self):
|
||||
vol = objects.Volume(self.backend_name, size=10, status='available')
|
||||
snap = objects.Snapshot(vol)
|
||||
vol._snapshots.append(snap)
|
||||
self.assertRaises(exception.InvalidVolume, vol.delete)
|
||||
self.assertEqual('available', vol.status)
|
||||
self.assertEqual('available', vol._ovo.status)
|
||||
|
||||
def test_delete_error(self):
|
||||
vol = objects.Volume(self.backend_name,
|
||||
|
@ -169,7 +169,7 @@ class TestVolume(base.BaseTest):
|
|||
|
||||
self.assertEqual(vol, assert_context.exception.resource)
|
||||
self.backend.driver.delete_volume.assert_called_once_with(vol._ovo)
|
||||
self.assertEqual('error_deleting', vol.status)
|
||||
self.assertEqual('error_deleting', vol._ovo.status)
|
||||
|
||||
def test_extend(self):
|
||||
vol = objects.Volume(self.backend_name, status='available', size=10)
|
||||
|
|
Loading…
Reference in New Issue