Merge "Account for error status during volume delete"
This commit is contained in:
commit
84781fb3af
@ -113,6 +113,12 @@ class BaseVolume(resource.Resource):
|
||||
result=_('Volume backup failed'))
|
||||
|
||||
def _delete_volume(self):
|
||||
"""Call the volume delete API
|
||||
|
||||
Returns False if further checking of volume status is required,
|
||||
True otherwise.
|
||||
|
||||
"""
|
||||
try:
|
||||
cinder = self.client()
|
||||
vol = cinder.volumes.get(self.resource_id)
|
||||
@ -122,13 +128,10 @@ class BaseVolume(resource.Resource):
|
||||
# just wait for the deletion to complete
|
||||
if vol.status != 'deleting':
|
||||
cinder.volumes.delete(self.resource_id)
|
||||
else:
|
||||
return True
|
||||
return False
|
||||
except Exception as ex:
|
||||
self.client_plugin().ignore_not_found(ex)
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def check_delete_complete(self, prg):
|
||||
if not prg.backup['called']:
|
||||
@ -147,11 +150,14 @@ class BaseVolume(resource.Resource):
|
||||
|
||||
if not prg.delete['complete']:
|
||||
try:
|
||||
self.client().volumes.get(self.resource_id)
|
||||
vol = self.client().volumes.get(self.resource_id)
|
||||
except Exception as ex:
|
||||
self.client_plugin().ignore_not_found(ex)
|
||||
prg.delete['complete'] = True
|
||||
return True
|
||||
if 'error' in vol.status.lower():
|
||||
raise exception.ResourceInError(status_reason='delete',
|
||||
resource_status=vol.status)
|
||||
else:
|
||||
return False
|
||||
return True
|
||||
|
@ -449,6 +449,10 @@ class VolumeTest(vt_base.BaseVolumeTest):
|
||||
|
||||
self.cinder_fc.volumes.get(fv.id).AndReturn(
|
||||
vt_base.FakeVolume('deleting'))
|
||||
self.cinder_fc.volumes.get(fv.id).AndReturn(
|
||||
vt_base.FakeVolume('deleting'))
|
||||
self.cinder_fc.volumes.get(fv.id).AndRaise(
|
||||
cinder_exp.NotFound('NotFound'))
|
||||
|
||||
self.m.ReplayAll()
|
||||
|
||||
@ -458,6 +462,31 @@ class VolumeTest(vt_base.BaseVolumeTest):
|
||||
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_volume_delete_error(self):
|
||||
fv = vt_base.FakeVolume('creating')
|
||||
stack_name = 'test_volume_deleting_stack'
|
||||
|
||||
fv = self._mock_create_volume(vt_base.FakeVolume('creating'),
|
||||
stack_name)
|
||||
|
||||
self.cinder_fc.volumes.get(fv.id).AndReturn(fv)
|
||||
self.cinder_fc.volumes.delete(fv.id).AndReturn(True)
|
||||
self.cinder_fc.volumes.get(fv.id).AndReturn(
|
||||
vt_base.FakeVolume('deleting'))
|
||||
self.cinder_fc.volumes.get(fv.id).AndReturn(
|
||||
vt_base.FakeVolume('error_deleting'))
|
||||
|
||||
self.m.ReplayAll()
|
||||
|
||||
stack = utils.parse_stack(self.t, stack_name=stack_name)
|
||||
rsrc = self.create_volume(self.t, stack, 'DataVolume')
|
||||
deleter = scheduler.TaskRunner(rsrc.destroy)
|
||||
self.assertRaisesRegexp(exception.ResourceFailure,
|
||||
".*ResourceInError.*error_deleting.*delete",
|
||||
deleter)
|
||||
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_volume_update_not_supported(self):
|
||||
stack_name = 'test_volume_updnotsup_stack'
|
||||
fv = vt_base.FakeVolume('creating')
|
||||
|
Loading…
x
Reference in New Issue
Block a user