Merge "Fix mitaka online migration for PCI devices" into stable/ocata
This commit is contained in:
commit
a8792e1161
@ -38,9 +38,15 @@ def upgrade(migrate_engine):
|
|||||||
raise exception.ValidationError(detail=msg)
|
raise exception.ValidationError(detail=msg)
|
||||||
|
|
||||||
pci_devices = Table('pci_devices', meta, autoload=True)
|
pci_devices = Table('pci_devices', meta, autoload=True)
|
||||||
|
|
||||||
|
# Ensure that all non-deleted PCI device records have a populated
|
||||||
|
# parent address. Note that we test directly against the 'type-VF'
|
||||||
|
# enum value to prevent issues with this migration going forward
|
||||||
|
# if the definition is altered.
|
||||||
count = select([func.count()]).select_from(pci_devices).where(and_(
|
count = select([func.count()]).select_from(pci_devices).where(and_(
|
||||||
pci_devices.c.deleted == 0,
|
pci_devices.c.deleted == 0,
|
||||||
pci_devices.c.parent_addr == None)).execute().scalar() # NOQA
|
pci_devices.c.parent_addr == None,
|
||||||
|
pci_devices.c.dev_type == 'type-VF')).execute().scalar() # NOQA
|
||||||
if count > 0:
|
if count > 0:
|
||||||
msg = WARNING_MSG % {
|
msg = WARNING_MSG % {
|
||||||
'count': count,
|
'count': count,
|
||||||
|
@ -268,19 +268,46 @@ class TestNewtonCheck(test.TestCase):
|
|||||||
self.assertRaises(exception.ValidationError,
|
self.assertRaises(exception.ValidationError,
|
||||||
self.migration.upgrade, self.engine)
|
self.migration.upgrade, self.engine)
|
||||||
|
|
||||||
def test_pci_device_not_migrated(self):
|
def test_pci_device_type_vf_not_migrated(self):
|
||||||
db_api.pci_device_update(self.context, 1, 'foo:bar',
|
db_api.pci_device_update(self.context, 1, 'foo:bar',
|
||||||
{'parent_addr': None,
|
{'parent_addr': None,
|
||||||
'compute_node_id': 1,
|
'compute_node_id': 1,
|
||||||
'address': 'foo:bar',
|
'address': 'foo:bar',
|
||||||
'vendor_id': '123',
|
'vendor_id': '123',
|
||||||
'product_id': '456',
|
'product_id': '456',
|
||||||
'dev_type': 'foo',
|
'dev_type': 'type-VF',
|
||||||
'label': 'foobar',
|
'label': 'foobar',
|
||||||
'status': 'whatisthis?'})
|
'status': 'whatisthis?'})
|
||||||
|
# type-VF devices should have a parent_addr
|
||||||
self.assertRaises(exception.ValidationError,
|
self.assertRaises(exception.ValidationError,
|
||||||
self.migration.upgrade, self.engine)
|
self.migration.upgrade, self.engine)
|
||||||
|
|
||||||
|
def test_pci_device_type_pf_not_migrated(self):
|
||||||
|
db_api.pci_device_update(self.context, 1, 'foo:bar',
|
||||||
|
{'parent_addr': None,
|
||||||
|
'compute_node_id': 1,
|
||||||
|
'address': 'foo:bar',
|
||||||
|
'vendor_id': '123',
|
||||||
|
'product_id': '456',
|
||||||
|
'dev_type': 'type-PF',
|
||||||
|
'label': 'foobar',
|
||||||
|
'status': 'whatisthis?'})
|
||||||
|
# blocker should not block on type-PF devices
|
||||||
|
self.migration.upgrade(self.engine)
|
||||||
|
|
||||||
|
def test_pci_device_type_pci_not_migrated(self):
|
||||||
|
db_api.pci_device_update(self.context, 1, 'foo:bar',
|
||||||
|
{'parent_addr': None,
|
||||||
|
'compute_node_id': 1,
|
||||||
|
'address': 'foo:bar',
|
||||||
|
'vendor_id': '123',
|
||||||
|
'product_id': '456',
|
||||||
|
'dev_type': 'type-PCI',
|
||||||
|
'label': 'foobar',
|
||||||
|
'status': 'whatisthis?'})
|
||||||
|
# blocker should not block on type-PCI devices
|
||||||
|
self.migration.upgrade(self.engine)
|
||||||
|
|
||||||
def test_deleted_not_migrated(self):
|
def test_deleted_not_migrated(self):
|
||||||
cn_values = dict(vcpus=1, memory_mb=512, local_gb=10,
|
cn_values = dict(vcpus=1, memory_mb=512, local_gb=10,
|
||||||
vcpus_used=0, memory_mb_used=256,
|
vcpus_used=0, memory_mb_used=256,
|
||||||
|
Loading…
Reference in New Issue
Block a user