summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-02-29 18:05:48 +0000
committerGerrit Code Review <review@openstack.org>2012-02-29 18:05:48 +0000
commite85b6bc5c758cc59a4c466ac47e81a4260b7d62c (patch)
tree67d5cba184c6482fa31cc6796bb322fef3df1ade /nova/api
parent0ab9f2cbaee13207d41e1475bc19e70db7046113 (diff)
parent8bc87c62a118c75a6cbf69c0edfa3ba5acbf3950 (diff)
Merge "Provide retry-after guidance on throttled requests"
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/wsgi.py12
1 files changed, 11 insertions, 1 deletions
diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py
index 8f0259024..047b68956 100644
--- a/nova/api/openstack/wsgi.py
+++ b/nova/api/openstack/wsgi.py
@@ -18,6 +18,8 @@
import inspect
from xml.dom import minidom
from xml.parsers import expat
+import math
+import time
from lxml import etree
import webob
@@ -1075,7 +1077,8 @@ class OverLimitFault(webob.exc.HTTPException):
"""
Initialize new `OverLimitFault` with relevant information.
"""
- self.wrapped_exc = webob.exc.HTTPRequestEntityTooLarge()
+ hdrs = OverLimitFault._retry_after(retry_time)
+ self.wrapped_exc = webob.exc.HTTPRequestEntityTooLarge(headers=hdrs)
self.content = {
"overLimitFault": {
"code": self.wrapped_exc.status_int,
@@ -1084,6 +1087,13 @@ class OverLimitFault(webob.exc.HTTPException):
},
}
+ @staticmethod
+ def _retry_after(retry_time):
+ delay = int(math.ceil(retry_time - time.time()))
+ retry_after = delay if delay > 0 else 0
+ headers = {'Retry-After': '%d' % retry_after}
+ return headers
+
@webob.dec.wsgify(RequestClass=Request)
def __call__(self, request):
"""