diff options
author | Tim Burke <tim.burke@gmail.com> | 2021-07-23 13:46:44 -0500 |
---|---|---|
committer | Clay Gerrard <clay.gerrard@gmail.com> | 2021-07-23 14:05:33 -0500 |
commit | 5759072d2544f30949eb41e0102e281aac192438 (patch) | |
tree | 769752a9cb8949a7e6096f7be59d5d8972c06b4f | |
parent | b53a9d811413840d03840c3d9d0287e2a8aff717 (diff) | |
download | swift-5759072d2544f30949eb41e0102e281aac192438.tar.gz |
s3api: Pass through 409s from SLO
Change-Id: Ie91a90fbb3488af63a51dcd18fa2c60ad00e234d
-rw-r--r-- | swift/common/middleware/s3api/s3request.py | 5 | ||||
-rw-r--r-- | swift/common/middleware/s3api/s3response.py | 6 | ||||
-rw-r--r-- | test/unit/common/middleware/s3api/test_obj.py | 3 |
3 files changed, 13 insertions, 1 deletions
diff --git a/swift/common/middleware/s3api/s3request.py b/swift/common/middleware/s3api/s3request.py index ed453fb55..2d1f7f287 100644 --- a/swift/common/middleware/s3api/s3request.py +++ b/swift/common/middleware/s3api/s3request.py @@ -55,7 +55,7 @@ from swift.common.middleware.s3api.s3response import AccessDenied, \ MissingContentLength, InvalidStorageClass, S3NotImplemented, InvalidURI, \ MalformedXML, InvalidRequest, RequestTimeout, InvalidBucketName, \ BadDigest, AuthorizationHeaderMalformed, SlowDown, \ - AuthorizationQueryParametersError, ServiceUnavailable + AuthorizationQueryParametersError, ServiceUnavailable, BrokenMPU from swift.common.middleware.s3api.exception import NotS3Request, \ BadSwiftRequest from swift.common.middleware.s3api.utils import utf8encode, \ @@ -1405,6 +1405,9 @@ class S3Request(swob.Request): if self.conf.ratelimit_as_client_error: raise SlowDown(status='429 Slow Down') raise SlowDown() + if resp.status_int == HTTP_CONFLICT: + # TODO: validate that this actually came up out of SLO + raise BrokenMPU() raise InternalError('unexpected status code %d' % status) diff --git a/swift/common/middleware/s3api/s3response.py b/swift/common/middleware/s3api/s3response.py index 3ba4018a6..e32793f0f 100644 --- a/swift/common/middleware/s3api/s3response.py +++ b/swift/common/middleware/s3api/s3response.py @@ -731,3 +731,9 @@ class UserKeyMustBeSpecified(ErrorResponse): _status = '400 Bad Request' _msg = 'The bucket POST must contain the specified field name. If it is ' \ 'specified, please check the order of the fields.' + + +class BrokenMPU(ErrorResponse): + # This is very much a Swift-ism, and we wish we didn't need it + _status = '409 Conflict' + _msg = 'Multipart upload has broken segment data.' diff --git a/test/unit/common/middleware/s3api/test_obj.py b/test/unit/common/middleware/s3api/test_obj.py index 5acf19163..92e2482c1 100644 --- a/test/unit/common/middleware/s3api/test_obj.py +++ b/test/unit/common/middleware/s3api/test_obj.py @@ -307,6 +307,9 @@ class TestS3ApiObj(S3ApiTestCase): code = self._test_method_error('GET', '/bucket/object', swob.HTTPServiceUnavailable) self.assertEqual(code, 'ServiceUnavailable') + code = self._test_method_error('GET', '/bucket/object', + swob.HTTPConflict) + self.assertEqual(code, 'BrokenMPU') code = self._test_method_error( 'GET', '/bucket/object', |