Merge "libvirt: avoid cpu check at s390x arch" into stable/stein

This commit is contained in:
Zuul 2020-07-08 15:30:20 +00:00 committed by Gerrit Code Review
commit a78be40224
2 changed files with 32 additions and 0 deletions

View File

@ -9394,6 +9394,26 @@ class LibvirtConnTestCase(test.NoDBTestCase,
ret = conn._compare_cpu(None, None, instance) ret = conn._compare_cpu(None, None, instance)
self.assertIsNone(ret) self.assertIsNone(ret)
def test_compare_cpu_virt_platform_s390x(self):
_fake_s390xcpu_info = {
"arch": "s390x",
"model": "test_model",
"vendor": "test_vendor",
"topology": {
"sockets": 1,
"cores": 8,
"threads": 16
},
"features": ["feature1", "feature2"]
}
instance = objects.Instance(**self.test_instance)
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
ret = conn._compare_cpu(None,
jsonutils.dumps(_fake_s390xcpu_info),
instance)
self.assertIsNone(ret)
@mock.patch.object(host.Host, 'compare_cpu') @mock.patch.object(host.Host, 'compare_cpu')
@mock.patch.object(nova.virt.libvirt, 'config') @mock.patch.object(nova.virt.libvirt, 'config')
def test_compare_cpu_invalid_cpuinfo_raises(self, mock_vconfig, def test_compare_cpu_invalid_cpuinfo_raises(self, mock_vconfig,

View File

@ -97,6 +97,7 @@ import nova.privsep.path
import nova.privsep.utils import nova.privsep.utils
from nova import utils from nova import utils
from nova import version from nova import version
from nova.virt import arch
from nova.virt import block_device as driver_block_device from nova.virt import block_device as driver_block_device
from nova.virt import configdrive from nova.virt import configdrive
from nova.virt.disk import api as disk_api from nova.virt.disk import api as disk_api
@ -7527,6 +7528,17 @@ class LibvirtDriver(driver.ComputeDriver):
else: else:
cpu = self._vcpu_model_to_cpu_config(guest_cpu) cpu = self._vcpu_model_to_cpu_config(guest_cpu)
# s390x doesn't support cpu model in host info, so compare
# cpu info will raise an error anyway, thus have to avoid check
# see bug 1854126 for more info
min_libvirt_version = (5, 9, 0)
if (cpu.arch in (arch.S390X, arch.S390) and
not self._host.has_min_version(min_libvirt_version)):
LOG.debug("on s390x platform, the min libvirt version "
"support cpu model compare is %s",
min_libvirt_version)
return
u = ("http://libvirt.org/html/libvirt-libvirt-host.html#" u = ("http://libvirt.org/html/libvirt-libvirt-host.html#"
"virCPUCompareResult") "virCPUCompareResult")
m = _("CPU doesn't have compatibility.\n\n%(ret)s\n\nRefer to %(u)s") m = _("CPU doesn't have compatibility.\n\n%(ret)s\n\nRefer to %(u)s")