From 4da058723332a58323640fabce3d95902946a07d Mon Sep 17 00:00:00 2001 From: Chris Friesen Date: Wed, 6 Feb 2019 14:57:12 -0600 Subject: [PATCH] fix up numa-topology live migration hypervisor check It turns out that even when KVM is supported by qemu the libvirt driver will report the hypervisor type as "QEMU". So we need to fix up the hypervisor type check in the live migration code that checks whether the instance has a NUMA topology. Closes-Bug: #1818092 Change-Id: I5127227a1e3d76dd413a820b048547ba578aff6b Signed-off-by: Chris Friesen --- nova/conductor/tasks/live_migrate.py | 5 ++++- nova/tests/unit/conductor/tasks/test_live_migrate.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/nova/conductor/tasks/live_migrate.py b/nova/conductor/tasks/live_migrate.py index b543a91ffb3..1c4f61a7236 100644 --- a/nova/conductor/tasks/live_migrate.py +++ b/nova/conductor/tasks/live_migrate.py @@ -163,7 +163,10 @@ def _check_instance_has_no_numa(self): # HyperV's vNUMA feature doesn't allow specific pinning hypervisor_type = objects.ComputeNode.get_by_host_and_nodename( self.context, self.source, self.instance.node).hypervisor_type - if hypervisor_type != obj_fields.HVType.KVM: + + # KVM is not a hypervisor, so when using a virt_type of "kvm" the + # hypervisor_type will still be "QEMU". + if hypervisor_type.lower() != obj_fields.HVType.QEMU: return msg = ('Instance has an associated NUMA topology. ' diff --git a/nova/tests/unit/conductor/tasks/test_live_migrate.py b/nova/tests/unit/conductor/tasks/test_live_migrate.py index d8f180da588..c2cb548511f 100644 --- a/nova/tests/unit/conductor/tasks/test_live_migrate.py +++ b/nova/tests/unit/conductor/tasks/test_live_migrate.py @@ -205,7 +205,7 @@ def test_check_instance_has_no_numa_passes_workaround(self, mock_get): def test_check_instance_has_no_numa_fails(self, mock_get): self.flags(enable_numa_live_migration=False, group='workarounds') mock_get.return_value = objects.ComputeNode( - uuid=uuids.cn1, hypervisor_type='kvm') + uuid=uuids.cn1, hypervisor_type='QEMU') self.task.instance.numa_topology = objects.InstanceNUMATopology( cells=[objects.InstanceNUMACell(id=0, cpuset=set([0]), memory=1024)])