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 2014/07/27 07:44:04 UTC
git commit: JCLOUDS-457: Add getBlob operation
Repository: jclouds-labs-aws
Updated Branches:
refs/heads/master 3bc840e67 -> 8e924e737
JCLOUDS-457: Add getBlob operation
Now the BlobStore abstraction supports the getBlob Operation
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/commit/8e924e73
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/tree/8e924e73
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/diff/8e924e73
Branch: refs/heads/master
Commit: 8e924e737fc8e5eef1225b6e0aaf080ac04e6b2e
Parents: 3bc840e
Author: Roman Coedo <ro...@gmail.com>
Authored: Wed Jul 23 23:53:09 2014 +0200
Committer: Andrew Gaul <ga...@apache.org>
Committed: Sat Jul 26 22:40:46 2014 -0700
----------------------------------------------------------------------
.../glacier/blobstore/GlacierBlobStore.java | 33 +++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/8e924e73/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java
----------------------------------------------------------------------
diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java
index 546abc1..f8a4f2a 100644
--- a/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java
+++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java
@@ -16,6 +16,7 @@
*/
package org.jclouds.glacier.blobstore;
+import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Set;
@@ -23,8 +24,11 @@ import java.util.Set;
import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.MutableBlobMetadata;
import org.jclouds.blobstore.domain.PageSet;
import org.jclouds.blobstore.domain.StorageMetadata;
+import org.jclouds.blobstore.domain.internal.BlobImpl;
+import org.jclouds.blobstore.domain.internal.MutableBlobMetadataImpl;
import org.jclouds.blobstore.internal.BaseBlobStore;
import org.jclouds.blobstore.options.CreateContainerOptions;
import org.jclouds.blobstore.options.GetOptions;
@@ -38,6 +42,8 @@ import org.jclouds.glacier.GlacierClient;
import org.jclouds.glacier.blobstore.functions.PaginatedVaultCollectionToStorageMetadata;
import org.jclouds.glacier.blobstore.strategy.MultipartUploadStrategy;
import org.jclouds.glacier.blobstore.strategy.PollingStrategy;
+import org.jclouds.glacier.domain.ArchiveRetrievalJobRequest;
+import org.jclouds.glacier.util.ContentRange;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Supplier;
@@ -119,9 +125,34 @@ public class GlacierBlobStore extends BaseBlobStore {
throw new UnsupportedOperationException();
}
+ private ArchiveRetrievalJobRequest buildArchiveRetrievalRequest(String key, GetOptions getOptions) {
+ ArchiveRetrievalJobRequest.Builder requestBuilder = ArchiveRetrievalJobRequest.builder().archiveId(key);
+ if (getOptions != null) {
+ checkArgument(getOptions.getRanges().size() <= 1);
+ if (getOptions.getRanges().size() == 1) {
+ requestBuilder.range(ContentRange.fromString(getOptions.getRanges().get(0)));
+ }
+ }
+ return requestBuilder.build();
+ }
+
@Override
public Blob getBlob(String container, String key, GetOptions getOptions) {
- throw new UnsupportedOperationException();
+ String jobId = sync.initiateJob(container, buildArchiveRetrievalRequest(key, getOptions));
+ try {
+ if (pollingStrategy.get().waitForSuccess(container, jobId)) {
+ MutableBlobMetadata blobMetadata = new MutableBlobMetadataImpl();
+ blobMetadata.setContainer(container);
+ blobMetadata.setName(key);
+
+ Blob blob = new BlobImpl(blobMetadata);
+ blob.setPayload(sync.getJobOutput(container, jobId));
+ return blob;
+ }
+ return null;
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
}
@Override