summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorMichael Gundlach <michael.gundlach@rackspace.com>2010-10-25 16:34:22 +0000
committerTarmac <>2010-10-25 16:34:22 +0000
commitc3fbd2f09502d7436395fde3637036a44ce629a5 (patch)
treeae80c971af99b7087a8d53ecd93929adda7e1b22 /nova/api
parent81e8c5256c1e52326b6b64cf237128364d1bcb22 (diff)
parentdaa2569eda7a744113813e2fd4747c2f3e05e0c1 (diff)
Exceptions in the OpenStack API will be converted to Faults as they should be, rather than barfing a stack trace to the user.
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