Merge "Avoid exploding if guest refuses to detach a volume"
This commit is contained in:
commit
ef4000a0d3
|
@ -230,6 +230,24 @@ class TestDriverBlockDevice(test.NoDBTestCase):
|
|||
bdm = getattr(self, attr % name)
|
||||
bdm['attachment_id'] = self.attachment_id
|
||||
|
||||
@mock.patch('nova.virt.block_device.LOG')
|
||||
@mock.patch('os_brick.encryptors')
|
||||
def test_driver_detach_passes_failed(self, enc, log):
|
||||
virt = mock.MagicMock()
|
||||
virt.detach_volume.side_effect = exception.DeviceDetachFailed(
|
||||
device='sda', reason='because testing')
|
||||
driver_bdm = self.driver_classes['volume'](self.volume_bdm)
|
||||
inst = mock.MagicMock(),
|
||||
vol_api = mock.MagicMock()
|
||||
|
||||
# Make sure we pass through DeviceDetachFailed,
|
||||
# but don't log it as an exception, just a warning
|
||||
self.assertRaises(exception.DeviceDetachFailed,
|
||||
driver_bdm.driver_detach,
|
||||
self.context, inst, vol_api, virt)
|
||||
self.assertFalse(log.exception.called)
|
||||
self.assertTrue(log.warning.called)
|
||||
|
||||
def test_no_device_raises(self):
|
||||
for name, cls in self.driver_classes.items():
|
||||
bdm = fake_block_device.fake_bdm_object(
|
||||
|
|
|
@ -304,6 +304,10 @@ class DriverVolumeBlockDevice(DriverBlockDevice):
|
|||
'%(mp)s : %(err)s',
|
||||
{'volume_id': volume_id, 'mp': mp,
|
||||
'err': err}, instance=instance)
|
||||
except exception.DeviceDetachFailed as err:
|
||||
with excutils.save_and_reraise_exception():
|
||||
LOG.warning('Guest refused to detach volume %(vol)s',
|
||||
{'vol': volume_id}, instance=instance)
|
||||
except Exception:
|
||||
with excutils.save_and_reraise_exception():
|
||||
LOG.exception('Failed to detach volume '
|
||||
|
|
Loading…
Reference in New Issue