From 07d74aa916ee2798f717ae5d298f8ca51e883770 Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Thu, 2 Feb 2012 12:52:10 -0800 Subject: Raise ApiError in response to InstanceTypeNotFound * Updates methods in nova.compute.instance_types to catch InstanceTypeNotFound exceptions and re-raise them as ApiError. - Previously, the methods in instance_types were raising ApiError in response to DBError, but the underlying db calls have since been updated to detect empty results and throw more specific exceptions. * Updates get_instance_type_by_flavor_id to not try to catch DBError, as the underlying db call only ever raises FlavorNotFound. get_instance_type_by_flavor_id should not raise ApiError, as callers expect the FlavorNotFound exception and know how to handle it. * Fixes bug 872618 Change-Id: I8652f04889adb448017afd253ecdcc840fbb660f --- Authors | 1 + nova/compute/instance_types.py | 23 +++++++++++------------ nova/tests/test_instance_types.py | 8 ++++---- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Authors b/Authors index 574a34f30..85cd5d751 100644 --- a/Authors +++ b/Authors @@ -107,6 +107,7 @@ Lvov Maxim Mandell Degerness Mark McLoughlin Mark Washenberger +Maru Newby Masanori Itoh Matt Dietz Matthew Hooker diff --git a/nova/compute/instance_types.py b/nova/compute/instance_types.py index 583b2da4e..e6a6d4a88 100644 --- a/nova/compute/instance_types.py +++ b/nova/compute/instance_types.py @@ -118,8 +118,8 @@ def get_default_instance_type(): name = FLAGS.default_instance_type try: return get_instance_type_by_name(name) - except exception.DBError: - raise exception.ApiError(_("Unknown instance type: %s") % name) + except exception.InstanceTypeNotFound as e: + raise exception.ApiError(e) def get_instance_type(instance_type_id): @@ -130,9 +130,8 @@ def get_instance_type(instance_type_id): ctxt = context.get_admin_context() try: return db.instance_type_get(ctxt, instance_type_id) - except exception.DBError: - msg = _("Unknown instance type: %s") % instance_type_id - raise exception.ApiError(msg) + except exception.InstanceTypeNotFound as e: + raise exception.ApiError(e) def get_instance_type_by_name(name): @@ -144,16 +143,16 @@ def get_instance_type_by_name(name): try: return db.instance_type_get_by_name(ctxt, name) - except exception.DBError: - raise exception.ApiError(_("Unknown instance type: %s") % name) + except exception.InstanceTypeNotFound as e: + raise exception.ApiError(e) # TODO(termie): flavor-specific code should probably be in the API that uses # flavors. def get_instance_type_by_flavor_id(flavorid): - """Retrieve instance type by flavorid.""" + """Retrieve instance type by flavorid. + + :raises: FlavorNotFound + """ ctxt = context.get_admin_context() - try: - return db.instance_type_get_by_flavor_id(ctxt, flavorid) - except exception.DBError: - raise exception.ApiError(_("Unknown instance type: %s") % flavorid) + return db.instance_type_get_by_flavor_id(ctxt, flavorid) diff --git a/nova/tests/test_instance_types.py b/nova/tests/test_instance_types.py index b0613c757..29b812a2b 100644 --- a/nova/tests/test_instance_types.py +++ b/nova/tests/test_instance_types.py @@ -174,7 +174,7 @@ class InstanceTypeTestCase(test.TestCase): def test_will_not_get_bad_default_instance_type(self): """ensures error raised on bad default instance type""" FLAGS.default_instance_type = 'unknown_flavor' - self.assertRaises(exception.InstanceTypeNotFoundByName, + self.assertRaises(exception.ApiError, instance_types.get_default_instance_type) def test_will_get_instance_type_by_id(self): @@ -185,12 +185,12 @@ class InstanceTypeTestCase(test.TestCase): def test_will_not_get_instance_type_by_unknown_id(self): """Ensure get by name returns default flavor with no name""" - self.assertRaises(exception.InstanceTypeNotFound, + self.assertRaises(exception.ApiError, instance_types.get_instance_type, 10000) def test_will_not_get_instance_type_with_bad_id(self): """Ensure get by name returns default flavor with bad name""" - self.assertRaises(exception.InstanceTypeNotFound, + self.assertRaises(exception.ApiError, instance_types.get_instance_type, 'asdf') def test_instance_type_get_by_None_name_returns_default(self): @@ -201,7 +201,7 @@ class InstanceTypeTestCase(test.TestCase): def test_will_not_get_instance_type_with_bad_name(self): """Ensure get by name returns default flavor with bad name""" - self.assertRaises(exception.InstanceTypeNotFoundByName, + self.assertRaises(exception.ApiError, instance_types.get_instance_type_by_name, 10000) def test_will_not_get_instance_by_unknown_flavor_id(self): -- cgit