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/08 22:04:15 UTC

git commit: JCLOUDS-334. Return URI only if container created

Updated Branches:
  refs/heads/master 103dd7315 -> 7d20658b0


JCLOUDS-334. Return URI only if container created

This allows us to honor the BlobStore.createContainerInLocation
interface and gives consistency with other providers.


Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/commit/7d20658b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/7d20658b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/7d20658b

Branch: refs/heads/master
Commit: 7d20658b024018af57b33ed71176174befc9547d
Parents: 103dd73
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Oct 4 21:32:48 2013 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue Oct 8 13:03:55 2013 -0700

----------------------------------------------------------------------
 .../main/java/org/jclouds/atmos/AtmosAsyncClient.java  |  4 ++--
 .../jclouds/atmos/blobstore/AtmosAsyncBlobStore.java   |  4 ++--
 .../org/jclouds/atmos/blobstore/AtmosBlobStore.java    |  6 ++----
 .../java/org/jclouds/atmos/AtmosAsyncClientTest.java   |  5 +++--
 .../java/org/jclouds/atmos/AtmosClientLiveTest.java    |  3 +++
 .../java/org/jclouds/blobstore/BlobStoreFallbacks.java | 13 +++++++++++++
 6 files changed, 25 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/7d20658b/apis/atmos/src/main/java/org/jclouds/atmos/AtmosAsyncClient.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/AtmosAsyncClient.java b/apis/atmos/src/main/java/org/jclouds/atmos/AtmosAsyncClient.java
index f8ad725..355e0d5 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/AtmosAsyncClient.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/AtmosAsyncClient.java
@@ -42,7 +42,6 @@ import org.jclouds.atmos.domain.BoundedSet;
 import org.jclouds.atmos.domain.DirectoryEntry;
 import org.jclouds.atmos.domain.SystemMetadata;
 import org.jclouds.atmos.domain.UserMetadata;
-import org.jclouds.atmos.fallbacks.EndpointIfAlreadyExists;
 import org.jclouds.atmos.filters.SignRequest;
 import org.jclouds.atmos.functions.AtmosObjectName;
 import org.jclouds.atmos.functions.ParseDirectoryListFromContentAndHeaders;
@@ -52,6 +51,7 @@ import org.jclouds.atmos.functions.ParseUserMetadataFromHeaders;
 import org.jclouds.atmos.functions.ReturnTrueIfGroupACLIsOtherRead;
 import org.jclouds.atmos.options.ListOptions;
 import org.jclouds.atmos.options.PutOptions;
+import org.jclouds.blobstore.BlobStoreFallbacks.NullOnKeyAlreadyExists;
 import org.jclouds.blobstore.BlobStoreFallbacks.ThrowContainerNotFoundOn404;
 import org.jclouds.blobstore.BlobStoreFallbacks.ThrowKeyNotFoundOn404;
 import org.jclouds.http.options.GetOptions;
@@ -115,7 +115,7 @@ public interface AtmosAsyncClient extends Closeable {
    @Named("CreateDirectory")
    @POST
    @Path("/{directoryName}/")
-   @Fallback(EndpointIfAlreadyExists.class)
+   @Fallback(NullOnKeyAlreadyExists.class)
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    @Consumes(MediaType.WILDCARD)
    ListenableFuture<URI> createDirectory(@PathParam("directoryName") String directoryName, PutOptions... options);

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/7d20658b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosAsyncBlobStore.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosAsyncBlobStore.java b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosAsyncBlobStore.java
index 79f7579..2981273 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosAsyncBlobStore.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosAsyncBlobStore.java
@@ -131,7 +131,7 @@ public class AtmosAsyncBlobStore extends BaseAsyncBlobStore {
    public ListenableFuture<Boolean> createContainerInLocation(Location location, String container) {
       return transform(async.createDirectory(container), new Function<URI, Boolean>() {
          public Boolean apply(URI from) {
-            return true;
+            return from != null;
          }
       }, userExecutor);
    }
@@ -277,7 +277,7 @@ public class AtmosAsyncBlobStore extends BaseAsyncBlobStore {
          return transform(async.createDirectory(container, publicRead()), new Function<URI, Boolean>() {
 
             public Boolean apply(URI from) {
-               return true;
+               return from != null;
             }
 
          }, userExecutor);

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/7d20658b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
index 58eb99b..ce3bcfb 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
@@ -118,8 +118,7 @@ public class AtmosBlobStore extends BaseBlobStore {
     */
    @Override
    public boolean createContainerInLocation(Location location, String container) {
-      sync.createDirectory(container);
-      return true;
+      return sync.createDirectory(container) != null;
    }
 
    /**
@@ -240,8 +239,7 @@ public class AtmosBlobStore extends BaseBlobStore {
    @Override
    public boolean createContainerInLocation(Location location, String container, CreateContainerOptions options) {
       if (options.isPublicRead()) {
-         sync.createDirectory(container, publicRead());
-         return true;
+         return sync.createDirectory(container, publicRead()) != null;
       }
       return createContainerInLocation(location, container);
    }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/7d20658b/apis/atmos/src/test/java/org/jclouds/atmos/AtmosAsyncClientTest.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/test/java/org/jclouds/atmos/AtmosAsyncClientTest.java b/apis/atmos/src/test/java/org/jclouds/atmos/AtmosAsyncClientTest.java
index 2d35c04..8287417 100644
--- a/apis/atmos/src/test/java/org/jclouds/atmos/AtmosAsyncClientTest.java
+++ b/apis/atmos/src/test/java/org/jclouds/atmos/AtmosAsyncClientTest.java
@@ -38,6 +38,7 @@ import org.jclouds.atmos.functions.ParseSystemMetadataFromHeaders;
 import org.jclouds.atmos.functions.ReturnTrueIfGroupACLIsOtherRead;
 import org.jclouds.atmos.options.ListOptions;
 import org.jclouds.atmos.options.PutOptions;
+import org.jclouds.blobstore.BlobStoreFallbacks.NullOnKeyAlreadyExists;
 import org.jclouds.blobstore.BlobStoreFallbacks.ThrowContainerNotFoundOn404;
 import org.jclouds.blobstore.BlobStoreFallbacks.ThrowKeyNotFoundOn404;
 import org.jclouds.blobstore.binders.BindBlobToMultipartFormTest;
@@ -137,7 +138,7 @@ public class AtmosAsyncClientTest extends BaseAsyncClientTest<AtmosAsyncClient>
 
       assertResponseParserClassEquals(method, request, ParseURIFromListOrLocationHeaderIf20x.class);
       assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, EndpointIfAlreadyExists.class);
+      assertFallbackClassEquals(method, NullOnKeyAlreadyExists.class);
 
       checkFilters(request);
    }
@@ -153,7 +154,7 @@ public class AtmosAsyncClientTest extends BaseAsyncClientTest<AtmosAsyncClient>
 
       assertResponseParserClassEquals(method, request, ParseURIFromListOrLocationHeaderIf20x.class);
       assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, EndpointIfAlreadyExists.class);
+      assertFallbackClassEquals(method, NullOnKeyAlreadyExists.class);
 
       checkFilters(request);
    }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/7d20658b/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java b/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java
index 9821a04..3d5f459 100644
--- a/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java
+++ b/apis/atmos/src/test/java/org/jclouds/atmos/AtmosClientLiveTest.java
@@ -19,6 +19,7 @@ package org.jclouds.atmos;
 import static com.google.common.base.Preconditions.checkState;
 import static org.jclouds.util.Predicates2.retry;
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
 import static org.testng.Assert.fail;
 
 import java.io.IOException;
@@ -140,6 +141,8 @@ public class AtmosClientLiveTest extends BaseBlobStoreIntegrationTest {
          BoundedSet<? extends DirectoryEntry> r2 = getApi().listDirectory(id.getObjectName());
          assert r2 != null;
       }
+      // subsequent creation should fail
+      assertNull(getApi().createDirectory(privateDirectory));
    }
 
    @Test(timeOut = 5 * 60 * 1000, dependsOnMethods = { "testCreateDirectory" })

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/7d20658b/blobstore/src/main/java/org/jclouds/blobstore/BlobStoreFallbacks.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/BlobStoreFallbacks.java b/blobstore/src/main/java/org/jclouds/blobstore/BlobStoreFallbacks.java
index b645ed3..5434545 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/BlobStoreFallbacks.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/BlobStoreFallbacks.java
@@ -106,4 +106,17 @@ public final class BlobStoreFallbacks {
          throw propagate(t);
       }
    }
+
+   public static final class NullOnKeyAlreadyExists implements Fallback<Object> {
+      public ListenableFuture<Object> create(Throwable t) throws Exception {
+         return immediateFuture(createOrPropagate(t));
+      }
+
+      public Object createOrPropagate(Throwable t) throws Exception {
+         if (checkNotNull(t, "throwable") instanceof KeyAlreadyExistsException) {
+            return null;
+         }
+         throw propagate(t);
+      }
+   }
 }