summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Burke <tim.burke@gmail.com>2021-07-23 13:46:44 -0500
committerClay Gerrard <clay.gerrard@gmail.com>2021-07-23 14:05:33 -0500
commit5759072d2544f30949eb41e0102e281aac192438 (patch)
tree769752a9cb8949a7e6096f7be59d5d8972c06b4f
parentb53a9d811413840d03840c3d9d0287e2a8aff717 (diff)
downloadswift-5759072d2544f30949eb41e0102e281aac192438.tar.gz
s3api: Pass through 409s from SLO
Change-Id: Ie91a90fbb3488af63a51dcd18fa2c60ad00e234d
-rw-r--r--swift/common/middleware/s3api/s3request.py5
-rw-r--r--swift/common/middleware/s3api/s3response.py6
-rw-r--r--test/unit/common/middleware/s3api/test_obj.py3
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',