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 2016/01/27 07:19:29 UTC

jclouds git commit: Delete single- and multi-part objects in Swift

Repository: jclouds
Updated Branches:
  refs/heads/master cf44ffd85 -> 02b2e80b2


Delete single- and multi-part objects in Swift

Due to Swift's wonky MPU implementation we must try the multi-part
delete first followed by a single-part delete if it fails.  Previously
delete would leave orphan subobjects.  Fixes andrewgaul/s3proxy#92.


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

Branch: refs/heads/master
Commit: 02b2e80b270687f083475cbee0f2bce1975ebefd
Parents: cf44ffd
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Jan 25 14:25:00 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue Jan 26 21:22:54 2016 -0800

----------------------------------------------------------------------
 .../v1/blobstore/RegionScopedSwiftBlobStore.java      | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/02b2e80b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java
----------------------------------------------------------------------
diff --git a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java
index e74437e..19c4f91 100644
--- a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java
+++ b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java
@@ -66,6 +66,7 @@ import org.jclouds.openstack.swift.v1.blobstore.functions.ToBlobMetadata;
 import org.jclouds.openstack.swift.v1.blobstore.functions.ToListContainerOptions;
 import org.jclouds.openstack.swift.v1.blobstore.functions.ToResourceMetadata;
 import org.jclouds.openstack.swift.v1.domain.Container;
+import org.jclouds.openstack.swift.v1.domain.DeleteStaticLargeObjectResponse;
 import org.jclouds.openstack.swift.v1.domain.ObjectList;
 import org.jclouds.openstack.swift.v1.domain.Segment;
 import org.jclouds.openstack.swift.v1.domain.SwiftObject;
@@ -347,9 +348,20 @@ public class RegionScopedSwiftBlobStore implements BlobStore {
 
    @Override
    public void removeBlob(String container, String name) {
-      api.getObjectApi(regionId, container).delete(name);
+      // Multipart objects have a manifest which points to subobjects.  Normally
+      // deleting a object only deletes the manifest, leaving the subobjects.
+      // We first try a multipart delete and if that fails since the object is
+      // not an MPU we fall back to single-part delete.
+      DeleteStaticLargeObjectResponse response = api.getStaticLargeObjectApi(regionId, container).delete(name);
+      if (!response.status().equals("200 OK")) {
+         api.getObjectApi(regionId, container).delete(name);
+      }
    }
 
+   /**
+    * Delete multiple single-part objects.  Note that this does not remove the
+    * subobjects of a multi-part upload.
+    */
    @Override
    public void removeBlobs(String container, Iterable<String> names) {
       BulkApi bulkApi = api.getBulkApi(regionId);