summaryrefslogtreecommitdiff
path: root/swift/common/middleware/s3api/s3request.py
diff options
context:
space:
mode:
authorTim Burke <tim.burke@gmail.com>2019-12-05 09:42:33 -0800
committerTim Burke <tim.burke@gmail.com>2019-12-05 09:42:33 -0800
commitf33c061ae92f33ea467c58749d3f15d2b1cc942c (patch)
tree3868c3648b5180fb775339584f6d5971a49eae1e /swift/common/middleware/s3api/s3request.py
parentd4b25e3346c2b19bdb8a4ab838e06da13ff1ee43 (diff)
downloadswift-f33c061ae92f33ea467c58749d3f15d2b1cc942c.tar.gz
s3api: Better handle 498/429 responses
Currently, they just 500 as an unexpected response status. Much better would be S3's '503 Slow Down' response. Of course, that's all dependent on where you place ratelimit in your pipeline -- and we haven't really given clear guidance on that. I'm not actually sure you *want* ratelimit to be after s3api and auth... but if you *do*, let's at least handle it gracefully. Change-Id: I36f0954fd9949d7d1404a0c381b917d1cfb17ec5 Related-Bug: 1669888
Diffstat (limited to 'swift/common/middleware/s3api/s3request.py')
-rw-r--r--swift/common/middleware/s3api/s3request.py6
1 files changed, 4 insertions, 2 deletions
diff --git a/swift/common/middleware/s3api/s3request.py b/swift/common/middleware/s3api/s3request.py
index c3e2c9463..f88b4b443 100644
--- a/swift/common/middleware/s3api/s3request.py
+++ b/swift/common/middleware/s3api/s3request.py
@@ -34,7 +34,7 @@ from swift.common.http import HTTP_OK, HTTP_CREATED, HTTP_ACCEPTED, \
HTTP_PARTIAL_CONTENT, HTTP_NOT_MODIFIED, HTTP_PRECONDITION_FAILED, \
HTTP_REQUESTED_RANGE_NOT_SATISFIABLE, HTTP_LENGTH_REQUIRED, \
HTTP_BAD_REQUEST, HTTP_REQUEST_TIMEOUT, HTTP_SERVICE_UNAVAILABLE, \
- is_success
+ HTTP_TOO_MANY_REQUESTS, HTTP_RATE_LIMITED, is_success
from swift.common.constraints import check_utf8
from swift.proxy.controllers.base import get_container_info, \
@@ -53,7 +53,7 @@ from swift.common.middleware.s3api.s3response import AccessDenied, \
InternalError, NoSuchBucket, NoSuchKey, PreconditionFailed, InvalidRange, \
MissingContentLength, InvalidStorageClass, S3NotImplemented, InvalidURI, \
MalformedXML, InvalidRequest, RequestTimeout, InvalidBucketName, \
- BadDigest, AuthorizationHeaderMalformed, \
+ BadDigest, AuthorizationHeaderMalformed, SlowDown, \
AuthorizationQueryParametersError, ServiceUnavailable
from swift.common.middleware.s3api.exception import NotS3Request, \
BadSwiftRequest
@@ -1371,6 +1371,8 @@ class S3Request(swob.Request):
raise AccessDenied()
if status == HTTP_SERVICE_UNAVAILABLE:
raise ServiceUnavailable()
+ if status in (HTTP_RATE_LIMITED, HTTP_TOO_MANY_REQUESTS):
+ raise SlowDown()
raise InternalError('unexpected status code %d' % status)