diff --git a/nova/tests/unit/virt/test_hardware.py b/nova/tests/unit/virt/test_hardware.py index eb015d735669..9201177fe27c 100644 --- a/nova/tests/unit/virt/test_hardware.py +++ b/nova/tests/unit/virt/test_hardware.py @@ -2429,15 +2429,23 @@ class VirtMemoryPagesTestCase(test.NoDBTestCase): spec={"hw:mem_page_size": "2048"})) def test_get_requested_mempages_pagesize_from_flavor_invalid(self): - self.assertRaises( + ex = self.assertRaises( exception.MemoryPageSizeInvalid, self._test_get_requested_mempages_pagesize, {"hw:mem_page_size": "foo"}) + self.assertIn("foo", str(ex)) - self.assertRaises( + ex = self.assertRaises( exception.MemoryPageSizeInvalid, self._test_get_requested_mempages_pagesize, {"hw:mem_page_size": "-42"}) + self.assertIn("-42", str(ex)) + + ex = self.assertRaises( + exception.MemoryPageSizeInvalid, + self._test_get_requested_mempages_pagesize, + {"hw:mem_page_size": "2M"}) + self.assertIn("2M", str(ex)) def test_get_requested_mempages_pagesizes_from_flavor_suffix_sweep(self): self.assertEqual( diff --git a/nova/virt/hardware.py b/nova/virt/hardware.py index 65852c948251..4a275b6beb0c 100644 --- a/nova/virt/hardware.py +++ b/nova/virt/hardware.py @@ -1341,21 +1341,15 @@ def _get_numa_pagesize_constraint(flavor, image_meta): return MEMPAGES_LARGE elif request == "small": return MEMPAGES_SMALL - else: - try: - request = int(request) - except ValueError: - try: - request = strutils.string_to_bytes( - request, return_int=True) / units.Ki - except ValueError: - request = 0 + elif request.isdigit(): + return int(request) - if request <= 0: + try: + return strutils.string_to_bytes( + request, return_int=True) / units.Ki + except ValueError: raise exception.MemoryPageSizeInvalid(pagesize=request) - return request - flavor_request, image_request = _get_flavor_image_meta( 'mem_page_size', flavor, image_meta)