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 <[email protected]> Authored: Wed Oct 9 13:49:29 2013 -0700 Committer: Andrew Gaul <[email protected]> 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); + } }
