@Override public String call() { String farETag = delegate().completeMultipartUpload(mpu, parts); return farETag; } });
@Override public String completeMultipartUpload(final MultipartUpload mpu, final List<MultipartPart> parts) { long length = 0; for (MultipartPart part : parts) { length += part.partSize(); } byte[] array = Longs.toByteArray(length); ByteSourcePayload payload = new ByteSourcePayload( ByteSource.wrap(array)); super.abortMultipartUpload(mpu); MultipartPart part = delegate().uploadMultipartPart(mpu, 1, payload); return delegate().completeMultipartUpload(mpu, ImmutableList.of(part)); }
String eTag = blobStore.completeMultipartUpload(mpu, parts);
@Override public String call() { String farETag = delegate().completeMultipartUpload(mpu, parts); return farETag; } });
@Override public String call() { String farETag = delegate().completeMultipartUpload(mpu, parts); return farETag; } });
@Override public void run() { try { eTag.set(blobStore.completeMultipartUpload(mpu, parts)); } catch (RuntimeException re) { exception.set(re); } } };
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { return delegate().completeMultipartUpload(mpu, parts); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { return delegate().completeMultipartUpload(mpu, parts); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { return delegate().completeMultipartUpload(mpu, parts); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { return delegate().completeMultipartUpload(mpu, parts); }
@Override public String completeMultipartUpload(final MultipartUpload mpu, final List<MultipartPart> parts) { long length = 0; for (MultipartPart part : parts) { length += part.partSize(); } byte[] array = Longs.toByteArray(length); ByteSourcePayload payload = new ByteSourcePayload( ByteSource.wrap(array)); super.abortMultipartUpload(mpu); MultipartPart part = delegate().uploadMultipartPart(mpu, 1, payload); return delegate().completeMultipartUpload(mpu, ImmutableList.of(part)); }
String eTag = blobStore.completeMultipartUpload(mpu, parts);
@Test(groups = { "integration", "live" }) public void test10000PartMultipartUpload() throws Exception { BlobStore blobStore = view.getBlobStore(); String container = getContainerName(); int partSize = (int) blobStore.getMinimumMultipartPartSize(); try { String name = "blob-name"; BlobBuilder blobBuilder = blobStore.blobBuilder(name); Blob blob = blobBuilder.build(); MultipartUpload mpu = blobStore.initiateMultipartUpload(container, blob.getMetadata(), new PutOptions()); ImmutableList.Builder<MultipartPart> parts = ImmutableList.builder(); byte[] content = new byte[partSize]; for (int i = 0; i < 10 * 1000; ++i) { Payload payload = Payloads.newByteArrayPayload(content); payload.getContentMetadata().setContentLength((long) partSize); parts.add(blobStore.uploadMultipartPart(mpu, i, payload)); } blobStore.completeMultipartUpload(mpu, parts.build()); BlobMetadata newBlobMetadata = blobStore.blobMetadata(container, name); assertThat(newBlobMetadata.getSize()).isEqualTo(10 * 1000 * partSize); } finally { returnContainer(container); } }
@Test(groups = { "integration", "live" }) public void testMultipartUploadMultiplePartsKnownETag() throws Exception { BlobStore blobStore = view.getBlobStore(); String container = getContainerName(); // Pre-computed ETag returned by AWS S3 for the MPU consisting of two 5MB parts filled with 'b' String expectedETag = "\"84462a16f6a60478d50148808aa609c1-2\""; int partSize = 5 * 1024 * 1024; try { String name = "blob-name"; BlobBuilder blobBuilder = blobStore.blobBuilder(name); Blob blob = blobBuilder.build(); MultipartUpload mpu = blobStore.initiateMultipartUpload(container, blob.getMetadata(), new PutOptions()); byte[] content = new byte[partSize]; Arrays.fill(content, (byte) 'b'); Payload payload = Payloads.newByteArrayPayload(content); payload.getContentMetadata().setContentLength((long) partSize); MultipartPart part1 = blobStore.uploadMultipartPart(mpu, 1, payload); MultipartPart part2 = blobStore.uploadMultipartPart(mpu, 2, payload); blobStore.completeMultipartUpload(mpu, ImmutableList.of(part1, part2)); BlobMetadata newBlobMetadata = blobStore.blobMetadata(container, name); assertThat(newBlobMetadata.getETag()).isEqualTo(expectedETag); } finally { returnContainer(container); } }
blobStore.completeMultipartUpload(mpu, ImmutableList.of(part));
blobStore.completeMultipartUpload(mpu, ImmutableList.of(part1, part2));
assertThat(uploads).hasSize(1); blobStore.completeMultipartUpload(mpu, ImmutableList.of(part1, part2)); mpu = null;