Make sure that we always have a parent_addr set

Since enabling PF tracking in the following commit:

50355c4595

we expect all of the PciDevice objects to have a parent_addr field
set since we use it for matching in case the (miss-)feature of allowing
to specify a PF address to enable all VFs was used in the whitelist.

This caused a lazy-load on the object which always fails, so this patch
makes sure that 'parent_addr' field is set to None on the object even if
it was not passed in by the driver.

Closes-bug: #1535367
Change-Id: I0ed8dd0702287859f7809a1a1a87dafe168d6e9b
This commit is contained in:
Nikola Dipanov 2016-01-19 13:49:47 +00:00 committed by Vladik Romanovsky
parent 806113e4f4
commit abcb26c121
3 changed files with 8 additions and 6 deletions

View File

@ -145,6 +145,9 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
map(lambda x: dev_dict.pop(x, None),
[key for key in no_changes])
# NOTE(ndipanov): This needs to be set as it's accessed when matching
dev_dict.setdefault('parent_addr')
for k, v in dev_dict.items():
if k in self.fields.keys():
setattr(self, k, v)

View File

@ -130,7 +130,6 @@ class FakeVirtDriver(driver.ComputeDriver):
'status': 'available',
'extra_k1': 'v1',
'numa_node': 1,
'parent_addr': None,
},
{
'label': 'label_8086_0123',
@ -142,7 +141,6 @@ class FakeVirtDriver(driver.ComputeDriver):
'status': 'available',
'extra_k1': 'v1',
'numa_node': 1,
'parent_addr': None,
},
{
'label': 'label_8086_7891',

View File

@ -121,7 +121,8 @@ class _TestPciDeviceObject(object):
self.assertEqual(self.pci_device.product_id, 'p')
self.assertEqual(self.pci_device.obj_what_changed(),
set(['compute_node_id', 'product_id', 'vendor_id',
'numa_node', 'status', 'address', 'extra_info']))
'numa_node', 'status', 'address', 'extra_info',
'parent_addr']))
def test_pci_device_extra_info(self):
self.dev_dict = copy.copy(dev_dict)
@ -134,7 +135,7 @@ class _TestPciDeviceObject(object):
self.assertEqual(self.pci_device.obj_what_changed(),
set(['compute_node_id', 'address', 'product_id',
'vendor_id', 'numa_node', 'status',
'extra_info']))
'parent_addr', 'extra_info']))
def test_update_device(self):
self.pci_device = pci_device.PciDevice.create(dev_dict)
@ -143,7 +144,7 @@ class _TestPciDeviceObject(object):
self.pci_device.update_device(changes)
self.assertEqual(self.pci_device.vendor_id, 'v2')
self.assertEqual(self.pci_device.obj_what_changed(),
set(['vendor_id', 'product_id']))
set(['vendor_id', 'product_id', 'parent_addr']))
def test_update_device_same_value(self):
self.pci_device = pci_device.PciDevice.create(dev_dict)
@ -153,7 +154,7 @@ class _TestPciDeviceObject(object):
self.assertEqual(self.pci_device.product_id, 'p')
self.assertEqual(self.pci_device.vendor_id, 'v2')
self.assertEqual(self.pci_device.obj_what_changed(),
set(['vendor_id', 'product_id']))
set(['vendor_id', 'product_id', 'parent_addr']))
def test_get_by_dev_addr(self):
ctxt = context.get_admin_context()