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();