summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/__init__.py10
-rw-r--r--nova/api/openstack/ratelimiting/__init__.py2
2 files changed, 11 insertions, 1 deletions
diff --git a/nova/api/openstack/__init__.py b/nova/api/openstack/__init__.py
index bb86f08dd..1dd3ba770 100644
--- a/nova/api/openstack/__init__.py
+++ b/nova/api/openstack/__init__.py
@@ -23,6 +23,7 @@ WSGI middleware for OpenStack API controllers.
import json
import time
+import logging
import routes
import webob.dec
import webob.exc
@@ -54,6 +55,15 @@ class API(wsgi.Middleware):
app = AuthMiddleware(RateLimitingMiddleware(APIRouter()))
super(API, self).__init__(app)
+ @webob.dec.wsgify
+ def __call__(self, req):
+ try:
+ return req.get_response(self.application)
+ except Exception as ex:
+ logging.warn("Caught error: %s" % str(ex))
+ exc = webob.exc.HTTPInternalServerError(explanation=str(ex))
+ return faults.Fault(exc)
+
class AuthMiddleware(wsgi.Middleware):
"""Authorize the openstack API request or return an HTTP Forbidden."""
diff --git a/nova/api/openstack/ratelimiting/__init__.py b/nova/api/openstack/ratelimiting/__init__.py
index 9e028ecf5..918caf055 100644
--- a/nova/api/openstack/ratelimiting/__init__.py
+++ b/nova/api/openstack/ratelimiting/__init__.py
@@ -68,10 +68,10 @@ class Limiter(object):
self._levels[key] = (now, new_level)
return None
-
# If one instance of this WSGIApps is unable to handle your load, put a
# sharding app in front that shards by username to one of many backends.
+
class WSGIApp(object):
"""Application that tracks rate limits in memory. Send requests to it of