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 2013/10/17 22:58:59 UTC
git commit: Return false if container already exists in AWS-S3
Updated Branches:
refs/heads/master e30f86521 -> 13f38d628
Return false if container already exists in AWS-S3
AWS-S3 returns the incorrect creation status when a container already
exists in the us-standard (or default) region. Fixes JCLOUDS-334.
Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/commit/13f38d62
Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/13f38d62
Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/13f38d62
Branch: refs/heads/master
Commit: 13f38d628d3cc554b19c05cbf7048de79d814694
Parents: e30f865
Author: Diwaker Gupta <di...@maginatics.com>
Authored: Wed Oct 9 13:49:29 2013 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Oct 17 13:58:43 2013 -0700
----------------------------------------------------------------------
.../aws/s3/blobstore/AWSS3AsyncBlobStore.java | 17 +++++++++++++++++
.../jclouds/aws/s3/blobstore/AWSS3BlobStore.java | 17 +++++++++++++++++
2 files changed, 34 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/13f38d62/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3AsyncBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3AsyncBlobStore.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3AsyncBlobStore.java
index 3d00beb..b3e2536 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3AsyncBlobStore.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3AsyncBlobStore.java
@@ -25,6 +25,7 @@ import javax.inject.Named;
import javax.inject.Provider;
import org.jclouds.Constants;
+import org.jclouds.aws.domain.Region;
import org.jclouds.aws.s3.AWSS3ApiMetadata;
import org.jclouds.aws.s3.AWSS3AsyncClient;
import org.jclouds.aws.s3.AWSS3Client;
@@ -36,6 +37,7 @@ import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.PageSet;
import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
+import org.jclouds.blobstore.options.CreateContainerOptions;
import org.jclouds.blobstore.options.PutOptions;
import org.jclouds.blobstore.strategy.internal.FetchBlobMetadata;
import org.jclouds.blobstore.util.BlobUtils;
@@ -51,11 +53,13 @@ import org.jclouds.s3.domain.AccessControlList;
import org.jclouds.s3.domain.BucketMetadata;
import org.jclouds.s3.domain.CannedAccessPolicy;
import org.jclouds.s3.domain.ObjectMetadata;
+import org.jclouds.s3.options.PutBucketOptions;
import com.google.common.base.Function;
import com.google.common.base.Supplier;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
+import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
@@ -121,4 +125,17 @@ public class AWSS3AsyncBlobStore extends S3AsyncBlobStore {
blob2Object.apply(blob), options);
}
+ @Override
+ public ListenableFuture<Boolean> createContainerInLocation(Location location, String container,
+ CreateContainerOptions options) {
+ if ((location == null || location.getId().equals(Region.US_STANDARD)) &&
+ Futures.getUnchecked(containerExists(container))) {
+ // AWS-S3 returns the incorrect creation status when a container
+ // already exists in the us-standard (or default) region. See
+ // JCLOUDS-334 for details.
+ // TODO: executing on the calling thread
+ return Futures.immediateFuture(Boolean.FALSE);
+ }
+ return super.createContainerInLocation(location, container, options);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/13f38d62/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStore.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStore.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStore.java
index 918e273..b68a23b 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStore.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStore.java
@@ -23,6 +23,7 @@ import java.util.Set;
import javax.inject.Inject;
import javax.inject.Provider;
+import org.jclouds.aws.domain.Region;
import org.jclouds.aws.s3.AWSS3ApiMetadata;
import org.jclouds.aws.s3.AWSS3Client;
import org.jclouds.aws.s3.blobstore.options.AWSS3PutObjectOptions;
@@ -33,6 +34,7 @@ import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.PageSet;
import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
+import org.jclouds.blobstore.options.CreateContainerOptions;
import org.jclouds.blobstore.options.PutOptions;
import org.jclouds.blobstore.strategy.internal.FetchBlobMetadata;
import org.jclouds.blobstore.util.BlobUtils;
@@ -53,6 +55,8 @@ import com.google.common.base.Function;
import com.google.common.base.Supplier;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
/**
* Provide AWS S3 specific extensions.
@@ -113,4 +117,17 @@ public class AWSS3BlobStore extends S3BlobStore {
return getContext().unwrap(AWSS3ApiMetadata.CONTEXT_TOKEN).getApi().putObject(container, blob2Object.apply(blob),
options);
}
+
+ @Override
+ public boolean createContainerInLocation(Location location, String container,
+ CreateContainerOptions options) {
+ if ((location == null || location.getId().equals(Region.US_STANDARD)) &&
+ containerExists(container)) {
+ // AWS-S3 returns the incorrect creation status when a container
+ // already exists in the us-standard (or default) region. See
+ // JCLOUDS-334 for details.
+ return false;
+ }
+ return super.createContainerInLocation(location, container, options);
+ }
}