Fix the vGPU dynamic options race
As we lookup the existing dynamic options *before* creating them as _get_supported_vgpu_types() is called *before* compute init_host(), we need to make sure we call again the dynamic options registration within it. Change-Id: Ib9387c381d39fac389374c731b210815c6d4af03 Closes-Bug: #1900006 (cherry picked from commit2bd8900d9b
) (cherry picked from commitc7d9d6d9dd
)
This commit is contained in:
parent
184a3c976f
commit
2ddc2e6ab0
|
@ -24190,6 +24190,20 @@ class LibvirtDriverTestCase(test.NoDBTestCase, TraitsComparisonMixin):
|
|||
libvirt_driver.LibvirtDriver,
|
||||
fake.FakeVirtAPI(), False)
|
||||
|
||||
@mock.patch.object(nova.conf.devices, 'register_dynamic_opts')
|
||||
def test_get_supported_vgpu_types_registering_dynamic_opts(self, rdo):
|
||||
self.flags(enabled_vgpu_types=['nvidia-11', 'nvidia-12'],
|
||||
group='devices')
|
||||
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
drvr._get_supported_vgpu_types()
|
||||
|
||||
# Okay below is confusing, but remember, ._get_supported_vgpu_types()
|
||||
# is first called by the LibvirtDriver object creation, so when
|
||||
# calling the above drvr._get_supported_vgpu_types() method, it will
|
||||
# be the second time that register_dynamic_opts() will be called.
|
||||
rdo.assert_has_calls([mock.call(CONF), mock.call(CONF)])
|
||||
|
||||
def test_get_vgpu_type_per_pgpu(self):
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
device = 'pci_0000_84_00_0'
|
||||
|
|
|
@ -6760,6 +6760,11 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
if not CONF.devices.enabled_vgpu_types:
|
||||
return []
|
||||
|
||||
# Make sure we register all the types as the compute service could
|
||||
# be calling this method before init_host()
|
||||
if len(CONF.devices.enabled_vgpu_types) > 1:
|
||||
nova.conf.devices.register_dynamic_opts(CONF)
|
||||
|
||||
for vgpu_type in CONF.devices.enabled_vgpu_types:
|
||||
group = getattr(CONF, 'vgpu_%s' % vgpu_type, None)
|
||||
if group is None or not group.device_addresses:
|
||||
|
|
Loading…
Reference in New Issue