Merge "Support x-amz-meta-* for Initiate Multipart Upload"

This commit is contained in:
Jenkins
2015-01-23 05:02:36 +00:00
committed by Gerrit Code Review
2 changed files with 30 additions and 8 deletions

View File

@@ -64,17 +64,22 @@ DEFAULT_MAX_UPLOADS = 1000
MAX_COMPLETE_UPLOAD_BODY_SIZE = 2048 * 1024
def _check_upload_info(req, app, upload_id):
def _get_upload_info(req, app, upload_id):
container = req.container_name + MULTIUPLOAD_SUFFIX
obj = '%s/%s' % (req.object_name, upload_id)
try:
req.get_response(app, 'HEAD', container=container, obj=obj)
return req.get_response(app, 'HEAD', container=container, obj=obj)
except NoSuchKey:
raise NoSuchUpload(upload_id=upload_id)
def _check_upload_info(req, app, upload_id):
_get_upload_info(req, app, upload_id)
class PartController(Controller):
"""
Handles the following APIs:
@@ -402,7 +407,12 @@ class UploadController(Controller):
Handles Complete Multipart Upload.
"""
upload_id = req.params['uploadId']
_check_upload_info(req, self.app, upload_id)
resp = _get_upload_info(req, self.app, upload_id)
headers = {}
for key, val in resp.headers.iteritems():
_key = key.lower()
if _key.startswith('x-amz-meta-'):
headers['x-object-meta-' + _key[11:]] = val
# Query for the objects in the segments area to make sure it completed
query = {
@@ -454,7 +464,8 @@ class UploadController(Controller):
try:
# TODO: add support for versioning
resp = req.get_response(self.app, 'PUT', body=dumps(manifest),
query={'multipart-manifest': 'put'})
query={'multipart-manifest': 'put'},
headers=headers)
except BadSwiftRequest as e:
msg = str(e)
if msg.startswith('Each segment, except the last, '