Merge "Don't call begin_detaching when detaching volume from shelved vm"
This commit is contained in:
commit
16dbf086eb
|
@ -4282,12 +4282,17 @@ class API(base.Base):
|
||||||
def detach_volume(self, context, instance, bdms):
|
def detach_volume(self, context, instance, bdms):
|
||||||
self._local_cleanup_bdm_volumes(bdms, instance, context)
|
self._local_cleanup_bdm_volumes(bdms, instance, context)
|
||||||
|
|
||||||
|
bdms = [objects.BlockDeviceMapping.get_by_volume_id(
|
||||||
|
context, volume['id'], instance.uuid)]
|
||||||
|
# The begin_detaching() call only works with in-use volumes,
|
||||||
|
# which will not be the case for volumes attached to a shelved
|
||||||
|
# offloaded server via the attachments API since those volumes
|
||||||
|
# will have `reserved` status.
|
||||||
|
if not bdms[0].attachment_id:
|
||||||
try:
|
try:
|
||||||
self.volume_api.begin_detaching(context, volume['id'])
|
self.volume_api.begin_detaching(context, volume['id'])
|
||||||
except exception.InvalidInput as exc:
|
except exception.InvalidInput as exc:
|
||||||
raise exception.InvalidVolume(reason=exc.format_message())
|
raise exception.InvalidVolume(reason=exc.format_message())
|
||||||
bdms = [objects.BlockDeviceMapping.get_by_volume_id(
|
|
||||||
context, volume['id'], instance.uuid)]
|
|
||||||
self._record_action_start(
|
self._record_action_start(
|
||||||
context, instance,
|
context, instance,
|
||||||
instance_actions.DETACH_VOLUME)
|
instance_actions.DETACH_VOLUME)
|
||||||
|
|
|
@ -1220,19 +1220,16 @@ class ServerTestV220(ServersTestBase):
|
||||||
self.assertIsNone(attach_response['device'])
|
self.assertIsNone(attach_response['device'])
|
||||||
|
|
||||||
# Test detach volume
|
# Test detach volume
|
||||||
with test.nested(mock.patch.object(volume.cinder.API,
|
with test.nested(mock.patch.object(objects.BlockDeviceMappingList,
|
||||||
'begin_detaching'),
|
|
||||||
mock.patch.object(objects.BlockDeviceMappingList,
|
|
||||||
'get_by_instance_uuid'),
|
'get_by_instance_uuid'),
|
||||||
mock.patch.object(compute_api.API,
|
mock.patch.object(compute_api.API,
|
||||||
'_local_cleanup_bdm_volumes')
|
'_local_cleanup_bdm_volumes')
|
||||||
) as (mock_check, mock_get_bdms, mock_clean_vols):
|
) as (mock_get_bdms, mock_clean_vols):
|
||||||
|
|
||||||
mock_get_bdms.return_value = fake_bdms
|
mock_get_bdms.return_value = fake_bdms
|
||||||
attachment_id = mock_get_bdms.return_value[0]['volume_id']
|
attachment_id = mock_get_bdms.return_value[0]['volume_id']
|
||||||
self.api.api_delete('/servers/%s/os-volume_attachments/%s' %
|
self.api.api_delete('/servers/%s/os-volume_attachments/%s' %
|
||||||
(server_id, attachment_id))
|
(server_id, attachment_id))
|
||||||
self.assertTrue(mock_check.called)
|
|
||||||
self.assertTrue(mock_clean_vols.called)
|
self.assertTrue(mock_clean_vols.called)
|
||||||
|
|
||||||
self._delete_server(server_id)
|
self._delete_server(server_id)
|
||||||
|
|
|
@ -10804,8 +10804,7 @@ class ComputeAPITestCase(BaseTestCase):
|
||||||
self.compute_api._detach_volume_shelved_offloaded(self.context,
|
self.compute_api._detach_volume_shelved_offloaded(self.context,
|
||||||
instance,
|
instance,
|
||||||
volume)
|
volume)
|
||||||
mock_begin_detaching.assert_called_once_with(self.context,
|
mock_begin_detaching.assert_not_called()
|
||||||
volume['id'])
|
|
||||||
self.assertTrue(mock_local_cleanup.called)
|
self.assertTrue(mock_local_cleanup.called)
|
||||||
|
|
||||||
@mock.patch.object(nova.volume.cinder.API, 'begin_detaching',
|
@mock.patch.object(nova.volume.cinder.API, 'begin_detaching',
|
||||||
|
|
Loading…
Reference in New Issue