Fix: migration configuration with cpu_shared_set (object part)

Live migrating to a host with cpu_shared_set configured will now
update the VM's configuration accordingly.

Example: live migrating a VM from source host with cpu_shared_set=0,1
to destination host with cpu_shared_set=2,3 will now update the
VM configuration.
(<vcpu cpuset="0-1"> will be updated to <vcpu cpuset="2-3">).

This update adds a new field, dst_cpu_shared_set_info, to the
LibvirtLiveMigrateData object, which requires an increase in the
object's version. As a result, this patch cannot be backported.

Related-Bug: #1869804
Change-Id: I806da0958fe436c989e09a52ca6b6f1bbd25a865
This commit is contained in:
René Ribaud 2024-04-05 15:20:20 +02:00 committed by Dan Smith
parent c199becf52
commit 2c3f4f2da5
3 changed files with 11 additions and 3 deletions

View File

@ -242,7 +242,8 @@ class LibvirtLiveMigrateData(LiveMigrateData):
# dst_supports_numa_live_migration fields
# Version 1.11: Added dst_supports_mdev_live_migration,
# source_mdev_types and target_mdevs fields
VERSION = '1.11'
# Version 1.12: Added dst_cpu_shared_set_info
VERSION = '1.12'
fields = {
'filename': fields.StringField(),
@ -280,12 +281,15 @@ class LibvirtLiveMigrateData(LiveMigrateData):
'source_mdev_types': fields.DictOfStringsField(),
# key is source mdev UUID and value is the destination mdev UUID.
'target_mdevs': fields.DictOfStringsField(),
'dst_cpu_shared_set_info': fields.SetOfIntegersField(),
}
def obj_make_compatible(self, primitive, target_version):
super(LibvirtLiveMigrateData, self).obj_make_compatible(
primitive, target_version)
target_version = versionutils.convert_version_to_tuple(target_version)
if (target_version < (1, 12)):
primitive.pop('dst_cpu_shared_set_info', None)
if target_version < (1, 11):
primitive.pop('target_mdevs', None)
primitive.pop('source_mdev_types', None)

View File

@ -99,7 +99,8 @@ class _TestLibvirtLiveMigrateData(object):
dst_numa_info=migrate_data.LibvirtLiveMigrateNUMAInfo(),
dst_supports_mdev_live_migration=True,
source_mdev_types={},
target_mdevs={})
target_mdevs={},
dst_cpu_shared_set_info=set())
manifest = ovo_base.obj_tree_get_versions(obj.obj_name())
data = lambda x: x['nova_object.data']
@ -141,6 +142,9 @@ class _TestLibvirtLiveMigrateData(object):
self.assertNotIn('dst_supports_mdev_live_migration', primitive)
self.assertNotIn('source_mdev_types', primitive)
self.assertNotIn('target_mdevs', primitive)
primitive = data(obj.obj_to_primitive(target_version='1.11',
version_manifest=manifest))
self.assertNotIn('dst_cpu_shared_set_info', primitive)
def test_bdm_obj_make_compatible(self):
obj = migrate_data.LibvirtLiveMigrateBDMInfo(

View File

@ -1128,7 +1128,7 @@ object_data = {
'KeyPair': '1.4-1244e8d1b103cc69d038ed78ab3a8cc6',
'KeyPairList': '1.3-94aad3ac5c938eef4b5e83da0212f506',
'LibvirtLiveMigrateBDMInfo': '1.1-5f4a68873560b6f834b74e7861d71aaf',
'LibvirtLiveMigrateData': '1.11-c535fa68cab55cc451e49996f1380ccc',
'LibvirtLiveMigrateData': '1.12-7cd9cbf1c0b3999be34137880bbcfbe5',
'LibvirtLiveMigrateNUMAInfo': '1.0-0e777677f3459d0ed1634eabbdb6c22f',
'LibvirtVPMEMDevice': '1.0-17ffaf47585199eeb9a2b83d6bde069f',
'MemoryDiagnostics': '1.0-2c995ae0f2223bb0f8e523c5cc0b83da',