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