Manage compute node that exposes no pci devices
Booting a VM with a pci device causes an exception when the host doesnt have any assignable pci devices. If a host doesnt expose any pci devices to nova, its pci_stats are set to None. This causes an exception when the PciPassthroughFilter checks if the host can support the pci requests. Closes-Bug: #1435981 Change-Id: Ia9fbec9c7a3afa9b7ea73c43b21db0909a195a36
This commit is contained in:
parent
bf70df295b
commit
69ec3b6f0c
@ -213,11 +213,8 @@ class HostState(object):
|
||||
self.updated = compute.updated_at
|
||||
self.numa_topology = compute.numa_topology
|
||||
self.instance_numa_topology = None
|
||||
if compute.pci_device_pools is not None:
|
||||
self.pci_stats = pci_stats.PciDeviceStats(
|
||||
compute.pci_device_pools)
|
||||
else:
|
||||
self.pci_stats = None
|
||||
|
||||
# All virt drivers report host_ip
|
||||
self.host_ip = compute.host_ip
|
||||
|
@ -13,6 +13,7 @@
|
||||
import mock
|
||||
|
||||
from nova import objects
|
||||
from nova.pci import stats
|
||||
from nova.scheduler.filters import pci_passthrough_filter
|
||||
from nova import test
|
||||
from nova.tests.unit.scheduler import fakes
|
||||
@ -65,3 +66,12 @@ class TestPCIPassthroughFilter(test.NoDBTestCase):
|
||||
attribute_dict={})
|
||||
self.assertRaises(AttributeError, self.filt_cls.host_passes,
|
||||
host, filter_properties)
|
||||
|
||||
def test_pci_passthrough_no_pci_stats(self):
|
||||
request = objects.InstancePCIRequest(count=1,
|
||||
spec=[{'vendor_id': '8086'}])
|
||||
requests = objects.InstancePCIRequests(requests=[request])
|
||||
filter_properties = {'pci_requests': requests}
|
||||
host = fakes.FakeHostState('host1', 'node1',
|
||||
attribute_dict={'pci_stats': stats.PciDeviceStats()})
|
||||
self.assertFalse(self.filt_cls.host_passes(host, filter_properties))
|
||||
|
@ -824,7 +824,7 @@ class HostStateTestCase(test.NoDBTestCase):
|
||||
|
||||
host = host_manager.HostState("fakehost", "fakenode")
|
||||
host.update_from_compute_node(compute)
|
||||
self.assertIsNone(host.pci_stats)
|
||||
self.assertEqual([], host.pci_stats.pools)
|
||||
self.assertEqual(hyper_ver_int, host.hypervisor_version)
|
||||
|
||||
def test_stat_consumption_from_compute_node_rescue_unshelving(self):
|
||||
@ -860,7 +860,7 @@ class HostStateTestCase(test.NoDBTestCase):
|
||||
self.assertEqual(42, host.num_io_ops)
|
||||
self.assertEqual(10, len(host.stats))
|
||||
|
||||
self.assertIsNone(host.pci_stats)
|
||||
self.assertEqual([], host.pci_stats.pools)
|
||||
self.assertEqual(hyper_ver_int, host.hypervisor_version)
|
||||
|
||||
@mock.patch('nova.virt.hardware.get_host_numa_usage_from_instance')
|
||||
|
Loading…
Reference in New Issue
Block a user