diff options
| author | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-09-10 12:15:02 -0700 |
|---|---|---|
| committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-09-10 12:17:57 -0700 |
| commit | d741328543ad6059bef56adb59f4c94781eaedcd (patch) | |
| tree | 8d26b55cd4f1a3108bffdd4f5ffdb0b843c73d82 | |
| parent | 641223db012211b353658dabaec27942e89ee5c6 (diff) | |
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
| -rw-r--r-- | nova/api/openstack/compute/contrib/flavormanage.py | 3 | ||||
| -rw-r--r-- | 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) |
