From d741328543ad6059bef56adb59f4c94781eaedcd Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Mon, 10 Sep 2012 12:15:02 -0700 Subject: Fix flavor deletion when there is a deleted flavor If there is a deleted flavor with the same ID as an undeleted flavor, the flavormanage delete code attempts to delete it again, which fails. This patch makes sure to pass read_deleted='no' when the flavor is retrieved for deletion so we get the undeleted flavor. Includes a failing test to make sure the value is passed properly. Fixes bug 1048678 Change-Id: If6a20de2526b7ba90ada4a40317a98f79b2141dc --- nova/api/openstack/compute/contrib/flavormanage.py | 3 ++- nova/tests/api/openstack/compute/contrib/test_flavor_manage.py | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/nova/api/openstack/compute/contrib/flavormanage.py b/nova/api/openstack/compute/contrib/flavormanage.py index a7e313c9c..69d5d6ed9 100644 --- a/nova/api/openstack/compute/contrib/flavormanage.py +++ b/nova/api/openstack/compute/contrib/flavormanage.py @@ -42,7 +42,8 @@ class FlavorManageController(wsgi.Controller): authorize(context) try: - flavor = instance_types.get_instance_type_by_flavor_id(id) + flavor = instance_types.get_instance_type_by_flavor_id( + id, read_deleted="no") except exception.NotFound, e: raise webob.exc.HTTPNotFound(explanation=str(e)) diff --git a/nova/tests/api/openstack/compute/contrib/test_flavor_manage.py b/nova/tests/api/openstack/compute/contrib/test_flavor_manage.py index feae4c47f..70fd5e4a7 100644 --- a/nova/tests/api/openstack/compute/contrib/test_flavor_manage.py +++ b/nova/tests/api/openstack/compute/contrib/test_flavor_manage.py @@ -25,11 +25,13 @@ from nova import test from nova.tests.api.openstack import fakes -def fake_get_instance_type_by_flavor_id(flavorid): +def fake_get_instance_type_by_flavor_id(flavorid, read_deleted='yes'): if flavorid == 'failtest': raise exception.NotFound("Not found sucka!") elif not str(flavorid) == '1234': raise Exception("This test expects flavorid 1234, not %s" % flavorid) + if read_deleted != 'no': + raise test.TestingException("Should not be reading deleted") return { 'root_gb': 1, @@ -60,7 +62,8 @@ def fake_create(name, memory_mb, vcpus, root_gb, ephemeral_gb, flavorid, swap, rxtx_factor, is_public): if flavorid is None: flavorid = 1234 - newflavor = fake_get_instance_type_by_flavor_id(flavorid) + newflavor = fake_get_instance_type_by_flavor_id(flavorid, + read_deleted="no") newflavor["name"] = name newflavor["memory_mb"] = int(memory_mb) -- cgit