Handle deleting status during volume detachment

VolumeAttachment resource is throwing exception during
detachment if the volume is in deleting status. This change
is to skip detachment if the volume is in deleting
status.

Change-Id: I8a7f4f1c95d64c123ea76150cc80a6ef12532e8b
Closes-Bug: #1426053
This commit is contained in:
Vijendar Komalla 2015-02-26 13:29:32 -06:00
parent 002c2a9678
commit 70f8730359
2 changed files with 28 additions and 1 deletions

View File

@ -174,6 +174,9 @@ class VolumeDetachTask(object):
else:
raise
if vol.status == 'deleting':
return
# detach the volume using volume_attachment
try:
server_api.delete_server_volume(self.server_id, self.attachment_id)
@ -193,7 +196,7 @@ class VolumeDetachTask(object):
LOG.info(_LI('%(name)s - status: %(status)s'),
{'name': str(self), 'status': vol.status})
if vol.status != 'available':
if vol.status not in ['available', 'deleting']:
LOG.info(_LI("Detachment failed - volume %(vol)s "
"is in %(status)s status"),
{"vol": vol.id,

View File

@ -322,6 +322,30 @@ class VolumeTest(vt_base.BaseVolumeTest):
self.m.VerifyAll()
def test_volume_detach_deleting_volume(self):
fv = vt_base.FakeVolume('creating')
fva = vt_base.FakeVolume('deleting')
stack_name = 'test_volume_detach_deleting_volume_stack'
self._mock_create_volume(fv, stack_name)
self._mock_create_server_volume_script(fva)
self.stub_VolumeConstraint_validate()
# delete script
self.fc.volumes.get_server_volume(u'WikiDatabase',
'vol-123').AndReturn(fva)
self.cinder_fc.volumes.get(fva.id).AndReturn(fva)
self.m.ReplayAll()
stack = utils.parse_stack(self.t, stack_name=stack_name)
self.create_volume(self.t, stack, 'DataVolume')
rsrc = self.create_attachment(self.t, stack, 'MountPoint')
scheduler.TaskRunner(rsrc.delete)()
self.m.VerifyAll()
def test_volume_detach_with_latency(self):
stack_name = 'test_volume_detach_latency_stack'