diff --git a/nova/objects/instance_numa.py b/nova/objects/instance_numa.py index 61c35e2a6e33..b497f4ae9973 100644 --- a/nova/objects/instance_numa.py +++ b/nova/objects/instance_numa.py @@ -295,6 +295,12 @@ class InstanceNUMATopology(base.NovaObject, cell.cpu_pinning.values() for cell in self.cells if cell.cpu_pinning])) + @property + def cpuset_reserved(self): + return set(itertools.chain.from_iterable([ + cell.cpuset_reserved for cell in self.cells + if cell.cpuset_reserved])) + def clear_host_pinning(self): """Clear any data related to how instance is pinned to the host. diff --git a/nova/tests/unit/objects/test_instance_numa.py b/nova/tests/unit/objects/test_instance_numa.py index 0d3bd0dba059..5a4c6da1cffe 100644 --- a/nova/tests/unit/objects/test_instance_numa.py +++ b/nova/tests/unit/objects/test_instance_numa.py @@ -29,10 +29,12 @@ fake_obj_numa_topology = objects.InstanceNUMATopology( instance_uuid=fake_instance_uuid, cells=[ objects.InstanceNUMACell( - id=0, cpuset=set(), pcpuset=set([1, 2]), memory=512, + id=0, cpuset=set(), pcpuset=set([1, 2]), + cpuset_reserved=set([5, 6]), memory=512, pagesize=2048), objects.InstanceNUMACell( - id=1, cpuset=set(), pcpuset=set([3, 4]), memory=512, + id=1, cpuset=set(), pcpuset=set([3, 4]), + cpuset_reserved=set([7, 8]), memory=512, pagesize=2048), ]) @@ -155,6 +157,10 @@ class _TestInstanceNUMACell(object): topo_obj.cells[1].pin_vcpus((3, 0), (4, 1)) self.assertEqual(set([0, 1, 10, 11]), topo_obj.cpu_pinning) + def test_cpuset_reserved(self): + topo_obj = get_fake_obj_numa_topology(self.context) + self.assertEqual(set([5, 6, 7, 8]), topo_obj.cpuset_reserved) + def test_clear_host_pinning(self): topo_obj = get_fake_obj_numa_topology(self.context) topo_obj.cells[0].pin_vcpus((1, 10), (2, 11))