diff --git a/nova/api/openstack/compute/flavor_manage.py b/nova/api/openstack/compute/flavor_manage.py index 68aeef68e36e..bd199c6b6898 100644 --- a/nova/api/openstack/compute/flavor_manage.py +++ b/nova/api/openstack/compute/flavor_manage.py @@ -106,7 +106,6 @@ class FlavorManageController(wsgi.Controller): description=description) # NOTE(gmann): For backward compatibility, non public flavor # access is not being added for created tenant. Ref -bug/1209101 - req.cache_db_flavor(flavor) except (exception.FlavorExists, exception.FlavorIdExists) as err: raise webob.exc.HTTPConflict(explanation=err.format_message()) @@ -141,9 +140,6 @@ class FlavorManageController(wsgi.Controller): except exception.FlavorNotFound as e: raise webob.exc.HTTPNotFound(explanation=e.format_message()) - # Cache the flavor so the flavor_access and flavor_rxtx extensions - # can add stuff to the response. - req.cache_db_flavor(flavor) include_extra_specs = False if api_version_request.is_supported( req, flavors_view.FLAVOR_EXTRA_SPECS_MICROVERSION): diff --git a/nova/api/openstack/compute/flavors.py b/nova/api/openstack/compute/flavors.py index 5b5fd9075218..b84cbbe1d09a 100644 --- a/nova/api/openstack/compute/flavors.py +++ b/nova/api/openstack/compute/flavors.py @@ -50,7 +50,6 @@ class FlavorsController(wsgi.Controller): """Return all flavors in detail.""" context = req.environ['nova.context'] limited_flavors = self._get_flavors(req) - req.cache_db_flavors(limited_flavors) include_extra_specs = False if api_version_request.is_supported( req, flavors_view.FLAVOR_EXTRA_SPECS_MICROVERSION): @@ -65,7 +64,6 @@ class FlavorsController(wsgi.Controller): context = req.environ['nova.context'] try: flavor = flavors.get_flavor_by_flavor_id(id, ctxt=context) - req.cache_db_flavor(flavor) except exception.FlavorNotFound as e: raise webob.exc.HTTPNotFound(explanation=e.format_message()) diff --git a/nova/api/openstack/compute/images.py b/nova/api/openstack/compute/images.py index 28d791a36e39..f2fb243145b5 100644 --- a/nova/api/openstack/compute/images.py +++ b/nova/api/openstack/compute/images.py @@ -89,7 +89,6 @@ class ImagesController(wsgi.Controller): explanation = _("Image not found.") raise webob.exc.HTTPNotFound(explanation=explanation) - req.cache_db_items('images', [image], 'id') return self._view_builder.show(req, image) @wsgi.Controller.api_version("2.1", MAX_PROXY_API_SUPPORT_VERSION) @@ -149,5 +148,4 @@ class ImagesController(wsgi.Controller): except exception.Invalid as e: raise webob.exc.HTTPBadRequest(explanation=e.format_message()) - req.cache_db_items('images', images, 'id') return self._view_builder.detail(req, images) diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py index 0ea07b1390ca..9b467379af1c 100644 --- a/nova/api/openstack/compute/servers.py +++ b/nova/api/openstack/compute/servers.py @@ -286,14 +286,13 @@ class ServersController(wsgi.Controller): response = self._view_builder.detail(req, instance_list) else: response = self._view_builder.index(req, instance_list) - req.cache_db_instances(instance_list) return response def _get_server(self, context, req, instance_uuid, is_detail=False): """Utility function for looking up an instance by uuid. :param context: request context for auth - :param req: HTTP request. The instance is cached in this request. + :param req: HTTP request. :param instance_uuid: UUID of the server instance to get :param is_detail: True if you plan on showing the details of the instance in the response, False otherwise. @@ -309,7 +308,6 @@ class ServersController(wsgi.Controller): instance = common.get_instance(self.compute_api, context, instance_uuid, expected_attrs=expected_attrs) - req.cache_db_instance(instance) return instance @staticmethod @@ -683,7 +681,6 @@ class ServersController(wsgi.Controller): if return_reservation_id: return wsgi.ResponseObject({'reservation_id': resv_id}) - req.cache_db_instances(instances) server = self._view_builder.create(req, instances[0]) if CONF.api.enable_instance_password: diff --git a/nova/api/openstack/compute/views/servers.py b/nova/api/openstack/compute/views/servers.py index f90b05a6ca36..51123ea348e6 100644 --- a/nova/api/openstack/compute/views/servers.py +++ b/nova/api/openstack/compute/views/servers.py @@ -483,8 +483,6 @@ class ViewBuilder(common.ViewBuilder): return fault_dict def _add_security_grps(self, req, servers, instances): - # TODO(arosen) this function should be refactored to reduce duplicate - # code and use get_instance_security_groups instead of get_db_instance. if not len(servers): return if not openstack_driver.is_neutron_security_groups(): diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py index 2eef33c01265..84abbfe6d19c 100644 --- a/nova/api/openstack/wsgi.py +++ b/nova/api/openstack/wsgi.py @@ -74,78 +74,14 @@ def get_supported_content_types(): return _SUPPORTED_CONTENT_TYPES -# NOTE(rlrossit): This function allows a get on both a dict-like and an -# object-like object. cache_db_items() is used on both versioned objects and -# dicts, so the function can't be totally changed over to [] syntax, nor -# can it be changed over to use getattr(). -def item_get(item, item_key): - if hasattr(item, '__getitem__'): - return item[item_key] - else: - return getattr(item, item_key) - - class Request(wsgi.Request): """Add some OpenStack API-specific logic to the base webob.Request.""" def __init__(self, *args, **kwargs): super(Request, self).__init__(*args, **kwargs) - self._extension_data = {'db_items': {}} if not hasattr(self, 'api_version_request'): self.api_version_request = api_version.APIVersionRequest() - def cache_db_items(self, key, items, item_key='id'): - """Allow API methods to store objects from a DB query to be - used by API extensions within the same API request. - - An instance of this class only lives for the lifetime of a - single API request, so there's no need to implement full - cache management. - """ - db_items = self._extension_data['db_items'].setdefault(key, {}) - for item in items: - db_items[item_get(item, item_key)] = item - - def get_db_items(self, key): - """Allow an API extension to get previously stored objects within - the same API request. - - Note that the object data will be slightly stale. - """ - return self._extension_data['db_items'][key] - - def get_db_item(self, key, item_key): - """Allow an API extension to get a previously stored object - within the same API request. - - Note that the object data will be slightly stale. - """ - return self.get_db_items(key).get(item_key) - - def cache_db_instances(self, instances): - self.cache_db_items('instances', instances, 'uuid') - - def cache_db_instance(self, instance): - self.cache_db_items('instances', [instance], 'uuid') - - def get_db_instances(self): - return self.get_db_items('instances') - - def get_db_instance(self, instance_uuid): - return self.get_db_item('instances', instance_uuid) - - def cache_db_flavors(self, flavors): - self.cache_db_items('flavors', flavors, 'flavorid') - - def cache_db_flavor(self, flavor): - self.cache_db_items('flavors', [flavor], 'flavorid') - - def get_db_flavors(self): - return self.get_db_items('flavors') - - def get_db_flavor(self, flavorid): - return self.get_db_item('flavors', flavorid) - def best_match_content_type(self): """Determine the requested response content-type.""" if 'nova.best_content_type' not in self.environ: diff --git a/nova/tests/unit/api/openstack/compute/test_flavor_access.py b/nova/tests/unit/api/openstack/compute/test_flavor_access.py index 542f5bf0249c..ae8583b4e62a 100644 --- a/nova/tests/unit/api/openstack/compute/test_flavor_access.py +++ b/nova/tests/unit/api/openstack/compute/test_flavor_access.py @@ -103,9 +103,6 @@ class FakeRequest(object): environ = {"nova.context": context.get_admin_context()} api_version_request = api_version.APIVersionRequest("2.1") - def get_db_flavor(self, flavor_id): - return INSTANCE_TYPES[flavor_id] - def is_legacy_v2(self): return False diff --git a/nova/tests/unit/api/openstack/compute/test_flavor_disabled.py b/nova/tests/unit/api/openstack/compute/test_flavor_disabled.py index c7d32d84081c..f2602bf7b91d 100644 --- a/nova/tests/unit/api/openstack/compute/test_flavor_disabled.py +++ b/nova/tests/unit/api/openstack/compute/test_flavor_disabled.py @@ -18,10 +18,6 @@ from nova import test from nova.tests.unit.api.openstack import fakes -def fake_get_db_flavor(req, flavorid): - return fakes.FLAVORS[flavorid] - - class FlavorDisabledTestV21(test.NoDBTestCase): base_url = '/v2/fake/flavors' content_type = 'application/json' @@ -32,8 +28,6 @@ class FlavorDisabledTestV21(test.NoDBTestCase): fakes.stub_out_nw_api(self) fakes.stub_out_flavor_get_all(self) fakes.stub_out_flavor_get_by_flavor_id(self) - self.stub_out('nova.api.openstack.wsgi.Request.get_db_flavor', - fake_get_db_flavor) def _make_request(self, url): req = fakes.HTTPRequest.blank(url) diff --git a/nova/tests/unit/api/openstack/test_wsgi.py b/nova/tests/unit/api/openstack/test_wsgi.py index 4b72842ec91f..1ad771331edd 100644 --- a/nova/tests/unit/api/openstack/test_wsgi.py +++ b/nova/tests/unit/api/openstack/test_wsgi.py @@ -76,27 +76,6 @@ class RequestTest(MicroversionedTest): result = request.best_match_content_type() self.assertEqual(result, "application/json") - def test_cache_and_retrieve_instances(self): - request = wsgi.Request.blank('/foo') - instances = [] - for x in range(3): - instances.append({'uuid': 'uuid%s' % x}) - # Store 2 - request.cache_db_instances(instances[:2]) - # Store 1 - request.cache_db_instance(instances[2]) - self.assertEqual(request.get_db_instance('uuid0'), - instances[0]) - self.assertEqual(request.get_db_instance('uuid1'), - instances[1]) - self.assertEqual(request.get_db_instance('uuid2'), - instances[2]) - self.assertIsNone(request.get_db_instance('uuid3')) - self.assertEqual(request.get_db_instances(), - {'uuid0': instances[0], - 'uuid1': instances[1], - 'uuid2': instances[2]}) - def test_from_request(self): request = wsgi.Request.blank('/') accepted = 'bogus;q=1, en-gb;q=0.7,en-us,en;q=0.5,*;q=0.7'