diff --git a/nova/tests/unit/virt/test_hardware.py b/nova/tests/unit/virt/test_hardware.py index 5bf30d7..b1caf32 100644 --- a/nova/tests/unit/virt/test_hardware.py +++ b/nova/tests/unit/virt/test_hardware.py @@ -2203,3 +2203,13 @@ class CPUPinningTestCase(test.NoDBTestCase, _CPUPinningTestCaseBase): self.assertRaises(exception.CPUPinningInvalid, hw.numa_usage_from_instances, host_pin, [inst_pin_1, inst_pin_2]) + + def test_bug_1519878(self): + host_pin_db = '{"nova_object.version": "1.2", "nova_object.changes": ["cells"], "nova_object.name": "NUMATopology", "nova_object.data": {"cells": [{"nova_object.version": "1.2", "nova_object.changes": ["cpu_usage", "memory_usage", "cpuset", "pinned_cpus", "siblings", "memory", "mempages", "id"], "nova_object.name": "NUMACell", "nova_object.data": {"cpu_usage": 12, "memory_usage": 32768, "cpuset": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "pinned_cpus": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "siblings": [], "memory": 130965, "mempages": [{"nova_object.version": "1.0", "nova_object.changes": ["total", "size_kb", "used"], "nova_object.name": "NUMAPagesTopology", "nova_object.data": {"total": 33527192, "used": 0, "size_kb": 4}, "nova_object.namespace": "nova"}, {"nova_object.version": "1.0", "nova_object.changes": ["total", "size_kb", "used"], "nova_object.name": "NUMAPagesTopology", "nova_object.data": {"total": 0, "used": 0, "size_kb": 2048}, "nova_object.namespace": "nova"}, {"nova_object.version": "1.0", "nova_object.changes": ["total", "size_kb", "used"], "nova_object.name": "NUMAPagesTopology", "nova_object.data": {"total": 8, "used": 0, "size_kb": 1048576}, "nova_object.namespace": "nova"}], "id": 0}, "nova_object.namespace": "nova"}, {"nova_object.version": "1.2", "nova_object.changes": ["cpu_usage", "memory_usage", "cpuset", "pinned_cpus", "siblings", "memory", "mempages", "id"], "nova_object.name": "NUMACell", "nova_object.data": {"cpu_usage": 4, "memory_usage": 4096, "cpuset": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], "pinned_cpus": [20, 21, 22, 23], "siblings": [], "memory": 131072, "mempages": [{"nova_object.version": "1.0", "nova_object.changes": ["total", "size_kb", "used"], "nova_object.name": "NUMAPagesTopology", "nova_object.data": {"total": 33554432, "used": 0, "size_kb": 4}, "nova_object.namespace": "nova"}, {"nova_object.version": "1.0", "nova_object.changes": ["total", "size_kb", "used"], "nova_object.name": "NUMAPagesTopology", "nova_object.data": {"total": 0, "used": 0, "size_kb": 2048}, "nova_object.namespace": "nova"}, {"nova_object.version": "1.0", "nova_object.changes": ["total", "size_kb", "used"], "nova_object.name": "NUMAPagesTopology", "nova_object.data": {"total": 8, "used": 0, "size_kb": 1048576}, "nova_object.namespace": "nova"}], "id": 1}, "nova_object.namespace": "nova"}]}, "nova_object.namespace": "nova"}' + host_topo = objects.NUMATopology.obj_from_primitive( + jsonutils.loads(host_pin_db)) + instance_pin_db = '{"nova_object.version": "1.2", "nova_object.changes": ["cells"], "nova_object.name": "InstanceNUMATopology", "nova_object.data": {"cells": [{"nova_object.version": "1.2", "nova_object.changes": ["cpuset", "cpu_pinning_raw", "id", "pagesize", "memory"], "nova_object.name": "InstanceNUMACell", "nova_object.data": {"cpu_topology": null, "pagesize": null, "cpuset": [0, 1, 2, 3], "memory": 4096, "cpu_pinning_raw": {}, "id": 0}, "nova_object.namespace": "nova"}]}, "nova_object.namespace": "nova"}' + inst_topo = objects.InstanceNUMATopology.obj_from_primitive( + jsonutils.loads(instance_pin_db)) + inst_topo = hw.numa_fit_instance_to_host(host_topo, inst_topo) + self.assertIsNotNone(inst_topo)