Abort multipart upload on putMultipartBlob error

This avoids dangling incomplete MPU.
This commit is contained in:
Andrew Gaul 2016-06-01 13:34:53 -07:00
parent bf7d864c41
commit 209152e30a
1 changed files with 16 additions and 11 deletions

View File

@ -324,18 +324,23 @@ public abstract class BaseBlobStore implements BlobStore {
@Beta
protected String putMultipartBlob(String container, Blob blob, PutOptions overrides) {
MultipartUpload mpu = initiateMultipartUpload(container, blob.getMetadata(), overrides);
List<MultipartPart> parts = Lists.newArrayList();
long contentLength = blob.getMetadata().getContentMetadata().getContentLength();
MultipartUploadSlicingAlgorithm algorithm = new MultipartUploadSlicingAlgorithm(
getMinimumMultipartPartSize(), getMaximumMultipartPartSize(), getMaximumNumberOfParts());
long partSize = algorithm.calculateChunkSize(contentLength);
int partNumber = 1;
for (Payload payload : slicer.slice(blob.getPayload(), partSize)) {
MultipartPart part = uploadMultipartPart(mpu, partNumber, payload);
parts.add(part);
++partNumber;
try {
List<MultipartPart> parts = Lists.newArrayList();
long contentLength = blob.getMetadata().getContentMetadata().getContentLength();
MultipartUploadSlicingAlgorithm algorithm = new MultipartUploadSlicingAlgorithm(
getMinimumMultipartPartSize(), getMaximumMultipartPartSize(), getMaximumNumberOfParts());
long partSize = algorithm.calculateChunkSize(contentLength);
int partNumber = 1;
for (Payload payload : slicer.slice(blob.getPayload(), partSize)) {
MultipartPart part = uploadMultipartPart(mpu, partNumber, payload);
parts.add(part);
++partNumber;
}
return completeMultipartUpload(mpu, parts);
} catch (RuntimeException re) {
abortMultipartUpload(mpu);
throw re;
}
return completeMultipartUpload(mpu, parts);
}
private static HttpResponseException returnResponseException(int code) {