Repository: jclouds-labs-aws
Updated Branches:
  refs/heads/master 377c58fba -> fd324fbfa


JCLOUDS-457: Fix deleteContainer

The ClearVaultStrategy now ignores ResourceNotFound exceptions.

deleteContainer now tries to delete the vault first to avoid long waits.
If the delete request fails, retries it every 24 hours.


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

Branch: refs/heads/master
Commit: fd324fbfad3fd9a8c0a24280f38b8b4e13e587ca
Parents: 377c58f
Author: Roman Coedo <[email protected]>
Authored: Mon Jul 28 08:13:48 2014 +0200
Committer: Andrew Gaul <[email protected]>
Committed: Sun Jul 27 23:49:03 2014 -0700

----------------------------------------------------------------------
 .../glacier/blobstore/GlacierBlobStore.java     | 29 ++++++++++++++++++++
 .../blobstore/strategy/ClearVaultStrategy.java  |  8 ++++--
 2 files changed, 35 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/fd324fbf/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java
index 20d6c07..f2f6226 100644
--- a/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java
+++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java
@@ -18,8 +18,11 @@ package org.jclouds.glacier.blobstore;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static org.jclouds.util.Predicates2.retry;
 
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 
 import org.jclouds.blobstore.BlobStoreContext;
 import org.jclouds.blobstore.domain.Blob;
@@ -48,11 +51,19 @@ import 
org.jclouds.glacier.domain.ArchiveRetrievalJobRequest;
 import org.jclouds.glacier.util.ContentRange;
 import org.jclouds.javax.annotation.Nullable;
 
+import com.google.common.base.Predicate;
 import com.google.common.base.Supplier;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
+import com.google.inject.name.Named;
 
 public class GlacierBlobStore extends BaseBlobStore {
+   public static final long DEFAULT_INVENTORY_UPDATE_TIME = 
TimeUnit.HOURS.toMillis(24);
+
+   @Inject(optional = true)
+   @Named("jclouds.inventory.update.time")
+   private final long inventoryUpdateTime = DEFAULT_INVENTORY_UPDATE_TIME;
+
    private final GlacierClient sync;
    private final Crypto crypto;
    private final Provider<MultipartUploadStrategy> multipartUploadStrategy;
@@ -80,6 +91,24 @@ public class GlacierBlobStore extends BaseBlobStore {
    }
 
    @Override
+   public void deleteContainer(String container) {
+      // attempt to delete possibly-empty vault to avoid inventory retrieval
+      if (!sync.deleteVault(container)) {
+         deletePathAndEnsureGone(container);
+      }
+   }
+
+   @Override
+   protected void deletePathAndEnsureGone(String container) {
+      checkState(retry(new Predicate<String>() {
+          public boolean apply(String container) {
+             clearContainer(container);
+             return sync.deleteVault(container);
+          }
+       }, inventoryUpdateTime).apply(container), "%s still exists after 
deleting!", container);
+   }
+
+   @Override
    protected boolean deleteAndVerifyContainerGone(String container) {
       return sync.deleteVault(container);
    }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/fd324fbf/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/ClearVaultStrategy.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/ClearVaultStrategy.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/ClearVaultStrategy.java
index 276ed01..1758460 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/ClearVaultStrategy.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/ClearVaultStrategy.java
@@ -24,6 +24,7 @@ import org.jclouds.glacier.GlacierClient;
 import org.jclouds.glacier.domain.ArchiveMetadata;
 import org.jclouds.glacier.domain.ArchiveMetadataCollection;
 import org.jclouds.glacier.domain.InventoryRetrievalJobRequest;
+import org.jclouds.rest.ResourceNotFoundException;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -45,8 +46,11 @@ public class ClearVaultStrategy implements ClearListStrategy 
{
       try {
          if (pollingStrategy.waitForSuccess(container, jobId)) {
             ArchiveMetadataCollection archives = 
sync.getInventoryRetrievalOutput(container, jobId);
-            for(ArchiveMetadata archive : archives) {
-               sync.deleteArchive(container, archive.getArchiveId());
+            for (ArchiveMetadata archive : archives) {
+               try {
+                  sync.deleteArchive(container, archive.getArchiveId());
+               } catch (ResourceNotFoundException ignored) {
+               }
             }
          }
       } catch (InterruptedException e) {

Reply via email to