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