Merge "Handle disabled CPU features to fix live migration failures" into stable/ussuri

This commit is contained in:
Zuul 2020-12-19 16:39:17 +00:00 committed by Gerrit Code Review
commit 4da1d4c705
2 changed files with 47 additions and 2 deletions

View File

@ -338,6 +338,26 @@ class LibvirtConfigCPUFeatureTest(LibvirtConfigBaseTest):
<feature name="mtrr"/>
""")
def test_config_parse_require(self):
xml = """
<feature name="mtrr" policy="require"/>
"""
xmldoc = etree.fromstring(xml)
obj = config.LibvirtConfigCPUFeature()
obj.parse_dom(xmldoc)
self.assertEqual(obj.policy, "require")
def test_config_parse_disable(self):
xml = """
<feature name="mtrr" policy="disable"/>
"""
xmldoc = etree.fromstring(xml)
obj = config.LibvirtConfigCPUFeature()
obj.parse_dom(xmldoc)
self.assertEqual(obj.policy, "disable")
class LibvirtConfigGuestCPUFeatureTest(LibvirtConfigBaseTest):
@ -436,6 +456,27 @@ class LibvirtConfigCPUTest(LibvirtConfigBaseTest):
</cpu>
""")
def test_config_disabled_features(self):
obj = config.LibvirtConfigCPU()
obj.model = "Penryn"
obj.vendor = "Intel"
obj.arch = obj_fields.Architecture.X86_64
disabled_feature = config.LibvirtConfigCPUFeature("mtrr")
disabled_feature.policy = "disable"
obj.add_feature(disabled_feature)
obj.add_feature(config.LibvirtConfigCPUFeature("apic"))
xml = obj.to_xml()
self.assertXmlEqual(xml, """
<cpu>
<arch>x86_64</arch>
<model>Penryn</model>
<vendor>Intel</vendor>
<feature name="apic"/>
</cpu>
""")
def test_only_uniq_cpu_featues(self):
obj = config.LibvirtConfigCPU()
obj.model = "Penryn"

View File

@ -674,11 +674,13 @@ class LibvirtConfigCPUFeature(LibvirtConfigObject):
**kwargs)
self.name = name
self.policy = "require"
def parse_dom(self, xmldoc):
super(LibvirtConfigCPUFeature, self).parse_dom(xmldoc)
self.name = xmldoc.get("name")
self.policy = xmldoc.get("policy", "require")
def format_dom(self):
ft = super(LibvirtConfigCPUFeature, self).format_dom()
@ -730,7 +732,8 @@ class LibvirtConfigCPU(LibvirtConfigObject):
elif c.tag == "feature":
f = LibvirtConfigCPUFeature()
f.parse_dom(c)
self.add_feature(f)
if f.policy != "disable":
self.add_feature(f)
def format_dom(self):
cpu = super(LibvirtConfigCPU, self).format_dom()
@ -753,7 +756,8 @@ class LibvirtConfigCPU(LibvirtConfigObject):
# sorting the features to allow more predictable tests
for f in sorted(self.features, key=lambda x: x.name):
cpu.append(f.format_dom())
if f.policy != "disable":
cpu.append(f.format_dom())
return cpu