diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-02-29 18:05:48 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-02-29 18:05:48 +0000 |
| commit | e85b6bc5c758cc59a4c466ac47e81a4260b7d62c (patch) | |
| tree | 67d5cba184c6482fa31cc6796bb322fef3df1ade /nova/api | |
| parent | 0ab9f2cbaee13207d41e1475bc19e70db7046113 (diff) | |
| parent | 8bc87c62a118c75a6cbf69c0edfa3ba5acbf3950 (diff) | |
Merge "Provide retry-after guidance on throttled requests"
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/openstack/wsgi.py | 12 |
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): """ |
