Merge "Fix NoneType error in _notify_volume_usage_detach"

This commit is contained in:
Zuul 2018-10-17 13:54:38 +00:00 committed by Gerrit Code Review
commit 9c5d4eb200
3 changed files with 26 additions and 1 deletions

View File

@ -5544,13 +5544,14 @@ class ComputeManager(manager.Manager):
if CONF.volume_usage_poll_interval <= 0:
return
vol_stats = []
mp = bdm.device_name
# Handle bootable volumes which will not contain /dev/
if '/dev/' in mp:
mp = mp[5:]
try:
vol_stats = self.driver.block_stats(instance, mp)
if vol_stats is None:
return
except NotImplementedError:
return

View File

@ -4931,6 +4931,23 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
expected_reqspec_hints, self.compute._get_scheduler_hints(
filter_properties, reqspec))
def test_notify_volume_usage_detach_no_block_stats(self):
"""Tests the case that the virt driver returns None from the
block_stats() method and no notification is sent, similar to the
virt driver raising NotImplementedError.
"""
self.flags(volume_usage_poll_interval=60)
fake_instance = objects.Instance()
fake_bdm = objects.BlockDeviceMapping(device_name='/dev/vda')
with mock.patch.object(self.compute.driver, 'block_stats',
return_value=None) as block_stats:
# Assert a notification isn't sent.
with mock.patch.object(self.compute.notifier, 'info',
new_callable=mock.NonCallableMock):
self.compute._notify_volume_usage_detach(
self.context, fake_instance, fake_bdm)
block_stats.assert_called_once_with(fake_instance, 'vda')
class ComputeManagerBuildInstanceTestCase(test.NoDBTestCase):
def setUp(self):

View File

@ -1400,6 +1400,13 @@ class ComputeDriver(object):
unused.
Note that this function takes an instance ID.
:param instance: nova.objects.Instance to get block storage statistics
:param disk_id: mountpoint name, e.g. "vda"
:returns: None if block statistics could not be retrieved, otherwise a
list of the form: [rd_req, rd_bytes, wr_req, wr_bytes, errs]
:raises: NotImplementedError if the driver does not implement this
method
"""
raise NotImplementedError()