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 2017/07/08 23:01:02 UTC
jclouds git commit: JCLOUDS-1111: Force overwriting Atmos objects
Repository: jclouds
Updated Branches:
refs/heads/master 8344ddcc2 -> e446b5b8b
JCLOUDS-1111: Force overwriting Atmos objects
This avoids a racy delete then write in the portable abstraction.
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/e446b5b8
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/e446b5b8
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/e446b5b8
Branch: refs/heads/master
Commit: e446b5b8b433327d8a11c0364abb051cff833431
Parents: 8344ddc
Author: Andrew Gaul <ga...@apache.org>
Authored: Sat Jul 8 15:17:37 2017 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Sat Jul 8 15:50:04 2017 -0700
----------------------------------------------------------------------
.../org/jclouds/atmos/blobstore/AtmosBlobStore.java | 1 +
.../java/org/jclouds/atmos/options/PutOptions.java | 11 +++++++++++
.../java/org/jclouds/atmos/util/AtmosUtils.java | 10 +---------
.../internal/BaseBlobIntegrationTest.java | 16 ++++++++++++++++
4 files changed, 29 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e446b5b8/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 a75fee2..d172129 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
@@ -258,6 +258,7 @@ public class AtmosBlobStore extends BaseBlobStore {
if (options.getBlobAccess() == BlobAccess.PUBLIC_READ) {
atmosOptions.publicRead();
}
+ atmosOptions.overwrite();
return AtmosUtils.putBlob(sync, crypto, blob2Object, container, blob, atmosOptions);
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e446b5b8/apis/atmos/src/main/java/org/jclouds/atmos/options/PutOptions.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/options/PutOptions.java b/apis/atmos/src/main/java/org/jclouds/atmos/options/PutOptions.java
index a0bdded..7811d84 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/options/PutOptions.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/options/PutOptions.java
@@ -53,6 +53,12 @@ public class PutOptions extends BaseHttpRequestOptions {
return this;
}
+ /** By default Atmos does not allow overwriting objects. */
+ public PutOptions overwrite() {
+ this.replaceHeader("x-emc-force-overwrite", "true");
+ return this;
+ }
+
public static class Builder {
/**
@@ -67,5 +73,10 @@ public class PutOptions extends BaseHttpRequestOptions {
PutOptions options = new PutOptions();
return options.publicNone();
}
+
+ public static PutOptions overwrite() {
+ PutOptions options = new PutOptions();
+ return options.overwrite();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e446b5b8/apis/atmos/src/main/java/org/jclouds/atmos/util/AtmosUtils.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/util/AtmosUtils.java b/apis/atmos/src/main/java/org/jclouds/atmos/util/AtmosUtils.java
index 4534ea2..790745c 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/util/AtmosUtils.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/util/AtmosUtils.java
@@ -33,7 +33,6 @@ import org.jclouds.atmos.options.PutOptions;
import org.jclouds.atmos.reference.AtmosErrorCode;
import org.jclouds.atmos.xml.ErrorHandler;
import org.jclouds.blobstore.ContainerNotFoundException;
-import org.jclouds.blobstore.KeyAlreadyExistsException;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.crypto.Crypto;
import org.jclouds.http.HttpCommand;
@@ -72,14 +71,7 @@ public class AtmosUtils {
Blob blob, PutOptions options) {
final String path = container + "/" + blob.getMetadata().getName();
final AtmosObject object = blob2Object.apply(blob);
-
- try {
- sync.createFile(container, object, options);
-
- } catch (KeyAlreadyExistsException e) {
- deletePathAndEnsureGone(sync, path);
- sync.createFile(container, object, options);
- }
+ sync.createFile(container, object, options);
return path;
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e446b5b8/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
----------------------------------------------------------------------
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
index 2e13783..5aee9f7 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
@@ -230,6 +230,22 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
}
@Test(groups = { "integration", "live" })
+ public void testOverwriteBlob() throws InterruptedException {
+ String container = getContainerName();
+ BlobStore blobStore = view.getBlobStore();
+ try {
+ String blobName = "hello";
+ Blob blob = blobStore.blobBuilder(blobName)
+ .payload(TEST_STRING)
+ .build();
+ blobStore.putBlob(container, blob);
+ blobStore.putBlob(container, blob);
+ } finally {
+ returnContainer(container);
+ }
+ }
+
+ @Test(groups = { "integration", "live" })
public void testCreateBlobWithExpiry() throws InterruptedException {
String container = getContainerName();
BlobStore blobStore = view.getBlobStore();