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:
Gorka Eguileor 2019-03-12 12:58:40 +01:00
parent f9dab3d6fb
commit fa0f5124e2
3 changed files with 9 additions and 9 deletions

View File

@ -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:

View File

@ -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

View File

@ -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)