xl: CompleteMultipartUpload should rename files in a routine. (#1527)

This solves the client timeout while renaming 9000+ parts.

Fixes #1526
This commit is contained in:
Harshavardhana
2016-05-08 02:38:35 -07:00
committed by Anand Babu (AB) Periasamy
parent 56b7df90e1
commit 3f51dd4fd4
3 changed files with 64 additions and 25 deletions
+7 -8
View File
@@ -60,13 +60,19 @@ func (fs fsObjects) CompleteMultipartUpload(bucket string, object string, upload
return "", InvalidUploadID{UploadID: uploadID}
}
// Calculate s3 compatible md5sum for complete multipart.
s3MD5, err := completeMultipartMD5(parts...)
if err != nil {
return "", err
}
tempObj := path.Join(tmpMetaPrefix, bucket, object, uploadID, incompleteFile)
fileWriter, err := fs.storage.CreateFile(minioMetaBucket, tempObj)
if err != nil {
return "", toObjectErr(err, bucket, object)
}
var md5Sums []string
// Loop through all parts, validate them and then commit to disk.
for _, part := range parts {
// Construct part suffix.
partSuffix := fmt.Sprintf("%.5d.%s", part.PartNumber, part.ETag)
@@ -96,7 +102,6 @@ func (fs fsObjects) CompleteMultipartUpload(bucket string, object string, upload
}
return "", err
}
md5Sums = append(md5Sums, part.ETag)
}
err = fileWriter.Close()
@@ -117,12 +122,6 @@ func (fs fsObjects) CompleteMultipartUpload(bucket string, object string, upload
return "", toObjectErr(err, bucket, object)
}
// Save the s3 md5.
s3MD5, err := completeMultipartMD5(md5Sums...)
if err != nil {
return "", err
}
// Cleanup all the parts if everything else has been safely committed.
if err = cleanupUploadedParts(fs.storage, mpartMetaPrefix, bucket, object, uploadID); err != nil {
return "", err