Updated Branches:
  refs/heads/1.6.x ba91165c2 -> 3399816f8

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/3399816f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/3399816f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/3399816f

Branch: refs/heads/1.6.x
Commit: 3399816f83014b3b829dc99ffd7ae7218724778a
Parents: ba91165
Author: Diwaker Gupta <[email protected]>
Authored: Wed Oct 9 13:49:29 2013 -0700
Committer: Andrew Gaul <[email protected]>
Committed: Thu Oct 17 13:38:23 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/3399816f/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/3399816f/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);
+   }
 }

Reply via email to