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 <[email protected]> Authored: Mon Jan 25 14:25:00 2016 -0800 Committer: Andrew Gaul <[email protected]> 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);
