You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2016/06/24 04:49:19 UTC
jclouds git commit: JCLOUDS-1125: local blobstore list MPUs
Repository: jclouds
Updated Branches:
refs/heads/master a845471b8 -> 6df0472ab
JCLOUDS-1125: local blobstore list MPUs
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/6df0472a
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/6df0472a
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/6df0472a
Branch: refs/heads/master
Commit: 6df0472ab5f70b96ea55ee6f75abd45d218f64ee
Parents: a845471
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Jun 20 23:32:04 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Jun 23 21:45:04 2016 -0700
----------------------------------------------------------------------
.../FilesystemBlobIntegrationTest.java | 9 ----
.../blobstore/config/LocalBlobStore.java | 48 ++++++++++++++++----
.../TransientBlobIntegrationTest.java | 9 ----
3 files changed, 40 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/6df0472a/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemBlobIntegrationTest.java
----------------------------------------------------------------------
diff --git a/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemBlobIntegrationTest.java b/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemBlobIntegrationTest.java
index fd75a94..d469037 100644
--- a/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemBlobIntegrationTest.java
+++ b/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemBlobIntegrationTest.java
@@ -93,13 +93,4 @@ public class FilesystemBlobIntegrationTest extends BaseBlobIntegrationTest {
public void testSetBlobAccess() throws Exception {
throw new SkipException("filesystem does not support anonymous access");
}
-
- @Test(groups = { "integration", "live" })
- public void testListMultipartUploads() throws Exception {
- try {
- super.testListMultipartUploads();
- } catch (UnsupportedOperationException uoe) {
- throw new SkipException("filesystem does not support listing multipart uploads");
- }
- }
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/6df0472a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
index 577243d..1b46b34 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
@@ -100,6 +100,7 @@ import com.google.common.net.HttpHeaders;
@Singleton
public final class LocalBlobStore implements BlobStore {
+ private static final String MULTIPART_PREFIX = ".mpus-";
@Resource
private Logger logger = Logger.NULL;
@@ -783,7 +784,11 @@ public final class LocalBlobStore implements BlobStore {
@Override
public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, PutOptions options) {
- return MultipartUpload.create(container, blobMetadata.getName(), UUID.randomUUID().toString(),
+ String uploadId = UUID.randomUUID().toString();
+ // create a stub blob
+ Blob blob = blobBuilder(MULTIPART_PREFIX + uploadId + "-" + blobMetadata.getName() + "-stub").payload(ByteSource.empty()).build();
+ putBlob(container, blob);
+ return MultipartUpload.create(container, blobMetadata.getName(), uploadId,
blobMetadata, options);
}
@@ -791,8 +796,9 @@ public final class LocalBlobStore implements BlobStore {
public void abortMultipartUpload(MultipartUpload mpu) {
List<MultipartPart> parts = listMultipartUpload(mpu);
for (MultipartPart part : parts) {
- removeBlob(mpu.containerName(), mpu.blobName() + "-" + part.partNumber());
+ removeBlob(mpu.containerName(), MULTIPART_PREFIX + mpu.id() + "-" + mpu.blobName() + "-" + part.partNumber());
}
+ removeBlob(mpu.containerName(), MULTIPART_PREFIX + mpu.id() + "-" + mpu.blobName() + "-stub");
}
@Override
@@ -800,7 +806,7 @@ public final class LocalBlobStore implements BlobStore {
ImmutableList.Builder<InputStream> streams = ImmutableList.builder();
long contentLength = 0;
for (MultipartPart part : parts) {
- Blob blobPart = getBlob(mpu.containerName(), mpu.blobName() + "-" + part.partNumber());
+ Blob blobPart = getBlob(mpu.containerName(), MULTIPART_PREFIX + mpu.id() + "-" + mpu.blobName() + "-" + part.partNumber());
contentLength += blobPart.getMetadata().getContentMetadata().getContentLength();
InputStream is;
try {
@@ -843,8 +849,9 @@ public final class LocalBlobStore implements BlobStore {
String eTag = putBlob(mpu.containerName(), blobBuilder.build());
for (MultipartPart part : parts) {
- storageStrategy.removeBlob(mpu.containerName(), mpu.blobName() + "-" + part.partNumber());
+ removeBlob(mpu.containerName(), MULTIPART_PREFIX + mpu.id() + "-" + mpu.blobName() + "-" + part.partNumber());
}
+ removeBlob(mpu.containerName(), MULTIPART_PREFIX + mpu.id() + "-" + mpu.blobName() + "-stub");
setBlobAccess(mpu.containerName(), mpu.blobName(), mpu.putOptions().getBlobAccess());
@@ -853,7 +860,7 @@ public final class LocalBlobStore implements BlobStore {
@Override
public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) {
- String partName = mpu.blobName() + "-" + partNumber;
+ String partName = MULTIPART_PREFIX + mpu.id() + "-" + mpu.blobName() + "-" + partNumber;
Blob blob = blobBuilder(partName)
.payload(payload)
.build();
@@ -866,11 +873,14 @@ public final class LocalBlobStore implements BlobStore {
public List<MultipartPart> listMultipartUpload(MultipartUpload mpu) {
ImmutableList.Builder<MultipartPart> parts = ImmutableList.builder();
ListContainerOptions options =
- new ListContainerOptions().prefix(mpu.blobName() + "-").recursive();
+ new ListContainerOptions().prefix(MULTIPART_PREFIX + mpu.id() + "-" + mpu.blobName() + "-").recursive();
while (true) {
PageSet<? extends StorageMetadata> pageSet = list(mpu.containerName(), options);
for (StorageMetadata sm : pageSet) {
- int partNumber = Integer.parseInt(sm.getName().substring((mpu.blobName() + "-").length()));
+ if (sm.getName().endsWith("-stub")) {
+ continue;
+ }
+ int partNumber = Integer.parseInt(sm.getName().substring((MULTIPART_PREFIX + mpu.id() + "-" + mpu.blobName() + "-").length()));
long partSize = -1; // TODO: could call getContentMetadata but did not above
parts.add(MultipartPart.create(partNumber, partSize, sm.getETag()));
}
@@ -884,7 +894,29 @@ public final class LocalBlobStore implements BlobStore {
@Override
public List<MultipartUpload> listMultipartUploads(String container) {
- throw new UnsupportedOperationException();
+ ImmutableList.Builder<MultipartUpload> mpus = ImmutableList.builder();
+ ListContainerOptions options = new ListContainerOptions().prefix(MULTIPART_PREFIX).recursive();
+ int uuidLength = UUID.randomUUID().toString().length();
+ while (true) {
+ PageSet<? extends StorageMetadata> pageSet = list(container, options);
+ for (StorageMetadata sm : pageSet) {
+ if (!sm.getName().endsWith("-stub")) {
+ continue;
+ }
+ String uploadId = sm.getName().substring(MULTIPART_PREFIX.length(), MULTIPART_PREFIX.length() + uuidLength);
+ String blobName = sm.getName().substring(MULTIPART_PREFIX.length() + uuidLength + 1);
+ int index = blobName.lastIndexOf('-');
+ blobName = blobName.substring(0, index);
+
+ mpus.add(MultipartUpload.create(container, blobName, uploadId, null, null));
+ }
+ if (pageSet.isEmpty() || pageSet.getNextMarker() == null) {
+ break;
+ }
+ options.afterMarker(pageSet.getNextMarker());
+ }
+
+ return mpus.build();
}
@Override
http://git-wip-us.apache.org/repos/asf/jclouds/blob/6df0472a/blobstore/src/test/java/org/jclouds/blobstore/integration/TransientBlobIntegrationTest.java
----------------------------------------------------------------------
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/TransientBlobIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/TransientBlobIntegrationTest.java
index 739e7ba..e2b842e 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/integration/TransientBlobIntegrationTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/TransientBlobIntegrationTest.java
@@ -31,13 +31,4 @@ public class TransientBlobIntegrationTest extends BaseBlobIntegrationTest {
public void testSetBlobAccess() throws Exception {
throw new SkipException("transient does not support anonymous access");
}
-
- @Test(groups = { "integration", "live" })
- public void testListMultipartUploads() throws Exception {
- try {
- super.testListMultipartUploads();
- } catch (UnsupportedOperationException uoe) {
- throw new SkipException("transient does not support listing multipart uploads");
- }
- }
}