From d02c326f23452b721ce8f516e57c1963b264ad0f Mon Sep 17 00:00:00 2001 From: "ya.wang" Date: Thu, 10 Oct 2019 14:25:51 +0800 Subject: [PATCH] libvirt: Change _compare_cpu to raise InvalidCPUInfo Previously only `check_can_live_migrate_destination` would use `_compare_cpu`, so it's reasonable to throw "MigrationPreCheckError". Now `_check_cpu_compatibility` will also use `_compare_cpu`, therefore, we need to throw a generic exception here, and handle the generic exception respectively. Change-Id: I70310a6769f02ab13c7495ae2075ae6890df728a Implements: blueprint cpu-model-selection --- nova/tests/unit/virt/libvirt/test_driver.py | 4 ++-- nova/virt/libvirt/driver.py | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index 371889ef513f..7aa463acddd2 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -10251,7 +10251,7 @@ class LibvirtConnTestCase(test.NoDBTestCase, compute_info = {'cpu_info': 'asdf', 'disk_available_least': 1} mock_cpu.side_effect = exception.InvalidCPUInfo(reason='foo') - self.assertRaises(exception.InvalidCPUInfo, + self.assertRaises(exception.MigrationPreCheckError, drvr.check_can_live_migrate_destination, self.context, instance_ref, compute_info, compute_info, False) @@ -10328,7 +10328,7 @@ class LibvirtConnTestCase(test.NoDBTestCase, instance = objects.Instance(**self.test_instance) mock_compare.side_effect = fakelibvirt.libvirtError('cpu') conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False) - self.assertRaises(exception.MigrationPreCheckError, + self.assertRaises(exception.InvalidCPUInfo, conn._compare_cpu, None, jsonutils.dumps(_fake_cpu_info), instance) diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index d5e039636bf0..41d029b48f87 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -793,8 +793,7 @@ class LibvirtDriver(driver.ComputeDriver): cpu.add_feature(vconfig.LibvirtConfigCPUFeature(flag)) try: self._compare_cpu(cpu, self._get_cpu_info(), None) - except (exception.InvalidCPUInfo, - exception.MigrationPreCheckError) as e: + except exception.InvalidCPUInfo as e: msg = (_("Configured extra flag: %(flag)s it not correct, or " "the host CPU does not support this flag. Please " "correct the config and try again. %(e)s") % { @@ -7973,11 +7972,14 @@ class LibvirtDriver(driver.ComputeDriver): (disk_available_gb * units.Ki) - CONF.reserved_host_disk_mb) # Compare CPU - if not instance.vcpu_model or not instance.vcpu_model.model: - source_cpu_info = src_compute_info['cpu_info'] - self._compare_cpu(None, source_cpu_info, instance) - else: - self._compare_cpu(instance.vcpu_model, None, instance) + try: + if not instance.vcpu_model or not instance.vcpu_model.model: + source_cpu_info = src_compute_info['cpu_info'] + self._compare_cpu(None, source_cpu_info, instance) + else: + self._compare_cpu(instance.vcpu_model, None, instance) + except exception.InvalidCPUInfo as e: + raise exception.MigrationPreCheckError(reason=e) # Create file on storage, to be checked on source host filename = self._create_shared_storage_test_file(instance) @@ -8284,7 +8286,7 @@ class LibvirtDriver(driver.ComputeDriver): return else: LOG.error(m, {'ret': e, 'u': u}) - raise exception.MigrationPreCheckError( + raise exception.InvalidCPUInfo( reason=m % {'ret': e, 'u': u}) if ret <= 0: