Repository: jclouds Updated Branches: refs/heads/master 343897d6d -> b2ced53e1
JCLOUDS-1111: Overwrite objects via remove and put This partially reverts commit e446b5b8b433327d8a11c0364abb051cff833431. AT&T Synaptic returns a bogus error on with x-emc-force-overwrite: HTTP 400, code=1012, message=There was a mismatch between the object size and the specified extent size. Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/b2ced53e Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/b2ced53e Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/b2ced53e Branch: refs/heads/master Commit: b2ced53e165ecbea4188e2d2673a7ddb2f5a793d Parents: 343897d Author: Andrew Gaul <[email protected]> Authored: Mon Nov 6 17:43:12 2017 -0800 Committer: Andrew Gaul <[email protected]> Committed: Mon Nov 6 18:05:47 2017 -0800 ---------------------------------------------------------------------- .../java/org/jclouds/atmos/blobstore/AtmosBlobStore.java | 1 - .../src/main/java/org/jclouds/atmos/options/PutOptions.java | 6 +++++- .../src/main/java/org/jclouds/atmos/util/AtmosUtils.java | 9 ++++++++- 3 files changed, 13 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/b2ced53e/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 f90deef..83079b3 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 @@ -267,7 +267,6 @@ 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/b2ced53e/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 7811d84..a956d7d 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,7 +53,11 @@ public class PutOptions extends BaseHttpRequestOptions { return this; } - /** By default Atmos does not allow overwriting objects. */ + /** + * By default Atmos does not allow overwriting objects. + * + * Note: older versions of Atmos do not support this header. + */ public PutOptions overwrite() { this.replaceHeader("x-emc-force-overwrite", "true"); return this; http://git-wip-us.apache.org/repos/asf/jclouds/blob/b2ced53e/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 790745c..660393a 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,6 +33,7 @@ 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; @@ -71,7 +72,13 @@ public class AtmosUtils { Blob blob, PutOptions options) { final String path = container + "/" + blob.getMetadata().getName(); final AtmosObject object = blob2Object.apply(blob); - sync.createFile(container, object, options); + + try { + sync.createFile(container, object, options); + } catch (KeyAlreadyExistsException e) { + deletePathAndEnsureGone(sync, path); + sync.createFile(container, object, options); + } return path; }
