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);
+ }
+ }
}