Delete GCS composite object components

Previously we left dangling subobjects.  The composite object retains
a reference to the components data.


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

Branch: refs/heads/master
Commit: ed262f7bd611d6754eb44106aa8d1a8d1abbe05a
Parents: c2a22bc
Author: Andrew Gaul <[email protected]>
Authored: Fri Jun 3 23:30:08 2016 -0700
Committer: Andrew Gaul <[email protected]>
Committed: Sat Jun 4 00:23:22 2016 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java   | 19 ++++++++++++++-----
 ...oogleCloudStorageBlobIntegrationLiveTest.java |  6 +-----
 2 files changed, 15 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed262f7b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git 
a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
 
b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 1cb927e..cce5d3c 100644
--- 
a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ 
b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -384,9 +384,9 @@ public final class GoogleCloudStorageBlobStore extends 
BaseBlobStore {
 
    @Override
    public String completeMultipartUpload(MultipartUpload mpu, 
List<MultipartPart> parts) {
-      ImmutableList.Builder<GoogleCloudStorageObject> builder = 
ImmutableList.builder();
+      ImmutableList.Builder<GoogleCloudStorageObject> objects = 
ImmutableList.builder();
       for (MultipartPart part : parts) {
-         builder.add(api.getObjectApi().getObject(mpu.containerName(),
+         objects.add(api.getObjectApi().getObject(mpu.containerName(),
                Strings2.urlEncode(getMPUPartName(mpu, part.partNumber()))));
       }
 
@@ -400,11 +400,20 @@ public final class GoogleCloudStorageBlobStore extends 
BaseBlobStore {
          destination.addAcl(controls);
       }
 
-      ComposeObjectTemplate template = 
ComposeObjectTemplate.builder().fromGoogleCloudStorageObject(builder.build())
+      ComposeObjectTemplate template = ComposeObjectTemplate.builder()
+            .fromGoogleCloudStorageObject(objects.build())
             .destination(destination).build();
-      return api.getObjectApi().composeObjects(mpu.containerName(), 
Strings2.urlEncode(mpu.blobName()), template)
+      String eTag = api.getObjectApi().composeObjects(mpu.containerName(), 
Strings2.urlEncode(mpu.blobName()), template)
             .etag();
-      // TODO: delete components?
+
+      // remove parts, composite object keeps a reference to them
+      ImmutableList.Builder<String> builder = ImmutableList.builder();
+      for (MultipartPart part : parts) {
+         builder.add(getMPUPartName(mpu, part.partNumber()));
+      }
+      removeBlobs(mpu.containerName(), builder.build());
+
+      return eTag;
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/ed262f7b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git 
a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
 
b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
index 8aa3fe1..244076f 100644
--- 
a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
+++ 
b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageBlobIntegrationLiveTest.java
@@ -18,10 +18,8 @@ package org.jclouds.googlecloudstorage.blobstore.integration;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
 
 import java.io.File;
 import java.io.IOException;
@@ -224,9 +222,7 @@ public class GoogleCloudStorageBlobIntegrationLiveTest 
extends BaseBlobIntegrati
          addMultipartBlobToContainer(containerName, "const.txt");
 
          long countAfter = blobStore.countBlobs(containerName);
-         assertNotEquals(countBefore, countAfter, "No blob was created");
-         assertTrue(countAfter - countBefore > 1, "A multipart blob wasn't 
actually created - "
-                  + "there was only 1 extra blob but there should be one 
manifest blob and multiple chunk blobs");
+         assertThat(countAfter).isEqualTo(countBefore + 1);
       } finally {
          returnContainer(containerName);
       }

Reply via email to