Repository: jclouds-labs-aws Updated Branches: refs/heads/master fd324fbfa -> 95d9b002e
JCLOUDS-457: Small fixes and documentation Now the BlobStore and the strategy implementations are annotated with @Singleton. Added a small documentation to the blobstore classes. 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/95d9b002 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/tree/95d9b002 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/diff/95d9b002 Branch: refs/heads/master Commit: 95d9b002ec1cfb61b78f597e47aae324bde29ffa Parents: fd324fb Author: Roman Coedo <[email protected]> Authored: Mon Jul 28 09:49:25 2014 +0200 Committer: Andrew Gaul <[email protected]> Committed: Mon Jul 28 01:17:42 2014 -0700 ---------------------------------------------------------------------- .../glacier/blobstore/GlacierBlobStore.java | 124 ++++++++++++++++++- .../config/GlacierBlobStoreContextModule.java | 5 +- ...hiveMetadataCollectionToStorageMetadata.java | 3 + .../ArchiveMetadataToBlobMetadata.java | 3 + ...erOptionsToInventoryRetrievalJobRequest.java | 3 + ...ginatedVaultCollectionToStorageMetadata.java | 3 + .../VaultMetadataToStorageMetadata.java | 3 + .../blobstore/strategy/ClearVaultStrategy.java | 60 --------- .../strategy/MultipartUploadStrategy.java | 3 + .../blobstore/strategy/PayloadSlice.java | 3 + .../blobstore/strategy/PollingStrategy.java | 3 + .../blobstore/strategy/SlicingStrategy.java | 3 + .../strategy/internal/BasePollingStrategy.java | 6 + .../strategy/internal/BaseSlicingStrategy.java | 7 ++ .../strategy/internal/ClearVaultStrategy.java | 65 ++++++++++ .../SequentialMultipartUploadStrategy.java | 6 + 16 files changed, 235 insertions(+), 65 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/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 f2f6226..eba0732 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java @@ -39,7 +39,6 @@ import org.jclouds.blobstore.options.ListContainerOptions; import org.jclouds.blobstore.options.PutOptions; import org.jclouds.blobstore.util.BlobUtils; import org.jclouds.collect.Memoized; -import org.jclouds.crypto.Crypto; import org.jclouds.domain.Location; import org.jclouds.glacier.GlacierClient; import org.jclouds.glacier.blobstore.functions.ArchiveMetadataCollectionToStorageMetadata; @@ -55,8 +54,10 @@ 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.Singleton; import com.google.inject.name.Named; +@Singleton public class GlacierBlobStore extends BaseBlobStore { public static final long DEFAULT_INVENTORY_UPDATE_TIME = TimeUnit.HOURS.toMillis(24); @@ -65,7 +66,6 @@ public class GlacierBlobStore extends BaseBlobStore { private final long inventoryUpdateTime = DEFAULT_INVENTORY_UPDATE_TIME; private final GlacierClient sync; - private final Crypto crypto; private final Provider<MultipartUploadStrategy> multipartUploadStrategy; private final Provider<PollingStrategy> pollingStrategy; private final PaginatedVaultCollectionToStorageMetadata vaultsToContainers; @@ -74,7 +74,7 @@ public class GlacierBlobStore extends BaseBlobStore { @Inject GlacierBlobStore(BlobStoreContext context, BlobUtils blobUtils, Supplier<Location> defaultLocation, - @Memoized Supplier<Set<? extends Location>> locations, GlacierClient sync, Crypto crypto, + @Memoized Supplier<Set<? extends Location>> locations, GlacierClient sync, Provider<MultipartUploadStrategy> multipartUploadStrategy, Provider<PollingStrategy> pollingStrategy, PaginatedVaultCollectionToStorageMetadata vaultsToContainers, @@ -87,9 +87,15 @@ public class GlacierBlobStore extends BaseBlobStore { this.vaultsToContainers = checkNotNull(vaultsToContainers, "vaultsToContainers"); this.multipartUploadStrategy = checkNotNull(multipartUploadStrategy, "multipartUploadStrategy"); this.sync = checkNotNull(sync, "sync"); - this.crypto = checkNotNull(crypto, "crypto"); } + /** + * Delete the container and all its blobs. + * This may be a VERY long duration method. + * + * @param container + * container name + */ @Override public void deleteContainer(String container) { // attempt to delete possibly-empty vault to avoid inventory retrieval @@ -108,32 +114,82 @@ public class GlacierBlobStore extends BaseBlobStore { }, inventoryUpdateTime).apply(container), "%s still exists after deleting!", container); } + /** + * Delete the container if empty. + * This method is idempotent. + * + * @param container + * container name + * @return false if the container still exists, true otherwise + */ @Override protected boolean deleteAndVerifyContainerGone(String container) { return sync.deleteVault(container); } + /** + * Lists the containers + * + * @return the container list + */ @Override public PageSet<? extends StorageMetadata> list() { return vaultsToContainers.apply(sync.listVaults()); } + /** + * This implementation invokes {@link GlacierClient#describeVault(String)} + * + * @param container + * container name + * @return true if the vault exists, false otherwise + */ @Override public boolean containerExists(String container) { return sync.describeVault(container) != null; } + /** + * Creates a container + * + * @param location + * currently ignored + * @param container + * container name + * @return true if the container was created, false otherwise + */ @Override public boolean createContainerInLocation(@Nullable Location location, String container) { return sync.createVault(container) != null; } + /** + * Creates a container + * + * @param location + * currently ignored + * @param container + * container name + * @param options + * currently ignored + * @return true if the container was created, false otherwise + */ @Override public boolean createContainerInLocation(@Nullable Location location, String container, CreateContainerOptions options) { return createContainerInLocation(location, container); } + /** + * Lists the blobs in the container + * This is a long duration method. The result may be inaccurate since it depends on the Glacier Inventory status. + * + * @param container + * container name + * @param listContainerOptions + * list options + * @return the blob list + */ @Override public PageSet<? extends StorageMetadata> list(String container, ListContainerOptions listContainerOptions) { String jobId = sync.initiateJob(container, containerOptionsToInventoryRetrieval.apply(listContainerOptions)); @@ -147,16 +203,46 @@ public class GlacierBlobStore extends BaseBlobStore { } } + /** + * This implementation invokes {@link GlacierBlobStore#blobMetadata} + * This is a long duration method. The result may be inaccurate since it depends on the Glacier Inventory status. + * + * @param container + * container name + * @param key + * blob key + * @return true if the blob exists, false otherwise + */ @Override public boolean blobExists(String container, String key) { return this.blobMetadata(container, key) != null; } + /** + * This implementation invokes {@link GlacierClient#uploadArchive} + * + * @param container + * container name + * @param blob + * blob to upload + * @return the blob name + */ @Override public String putBlob(String container, Blob blob) { return sync.uploadArchive(container, blob.getPayload()); } + /** + * Puts the blob in the container. + * + * @param container + * container name + * @param blob + * blob to upload + * @param options + * upload options. If multipart is set, multiple rpcs will be issued. + * @return the blob name + */ @Override public String putBlob(String container, Blob blob, PutOptions options) { if (options.isMultipart()) { @@ -165,6 +251,16 @@ public class GlacierBlobStore extends BaseBlobStore { return putBlob(container, blob); } + /** + * Retrieves the blob metadata. + * This is a long duration method. The result may be inaccurate since it depends on the Glacier Inventory status. + * + * @param container + * container name + * @param key + * blob name + * @return null if the blob doesn't exist, the blob metadata otherwise + */ @Override public BlobMetadata blobMetadata(String container, String key) { PageSet<? extends StorageMetadata> blobs = this.list(container, null); @@ -187,6 +283,18 @@ public class GlacierBlobStore extends BaseBlobStore { return requestBuilder.build(); } + /** + * Retrieves the blob + * This is a long duration method. + * + * @param container + * container name + * @param key + * blob name + * @param getOptions + * getOptions + * @return null if the blob doesn't exist or the archive retrieval fails, the blob otherwise + */ @Override public Blob getBlob(String container, String key, GetOptions getOptions) { String jobId = sync.initiateJob(container, buildArchiveRetrievalRequest(key, getOptions)); @@ -206,6 +314,14 @@ public class GlacierBlobStore extends BaseBlobStore { } } + /** + * This implementation invokes {@link GlacierClient#deleteArchive(String, String)} + * + * @param container + * container name + * @param key + * blob name + */ @Override public void removeBlob(String container, String key) { sync.deleteArchive(container, key); http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/config/GlacierBlobStoreContextModule.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/config/GlacierBlobStoreContextModule.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/config/GlacierBlobStoreContextModule.java index e45c809..6492640 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/config/GlacierBlobStoreContextModule.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/config/GlacierBlobStoreContextModule.java @@ -22,7 +22,7 @@ import org.jclouds.blobstore.attr.ConsistencyModel; import org.jclouds.blobstore.strategy.ClearListStrategy; import org.jclouds.glacier.blobstore.GlacierAsyncBlobStore; import org.jclouds.glacier.blobstore.GlacierBlobStore; -import org.jclouds.glacier.blobstore.strategy.ClearVaultStrategy; +import org.jclouds.glacier.blobstore.strategy.internal.ClearVaultStrategy; import org.jclouds.glacier.blobstore.strategy.MultipartUploadStrategy; import org.jclouds.glacier.blobstore.strategy.PollingStrategy; import org.jclouds.glacier.blobstore.strategy.SlicingStrategy; @@ -32,6 +32,9 @@ import org.jclouds.glacier.blobstore.strategy.internal.SequentialMultipartUpload import com.google.inject.AbstractModule; +/** + * Configures the context. Requires {@link GlacierAsyncBlobStore} bound. + */ public class GlacierBlobStoreContextModule extends AbstractModule { @Override protected void configure() { http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataCollectionToStorageMetadata.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataCollectionToStorageMetadata.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataCollectionToStorageMetadata.java index 2df2016..06d6884 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataCollectionToStorageMetadata.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataCollectionToStorageMetadata.java @@ -24,6 +24,9 @@ import org.jclouds.glacier.domain.ArchiveMetadataCollection; import com.google.common.base.Function; import com.google.common.collect.Iterables; +/** + * Converts ArchiveMetadataCollection into PageSet<StorageMetadata> + */ public class ArchiveMetadataCollectionToStorageMetadata implements Function<ArchiveMetadataCollection, PageSet<? extends StorageMetadata>> { @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataToBlobMetadata.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataToBlobMetadata.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataToBlobMetadata.java index 255252a..f8b9a58 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataToBlobMetadata.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataToBlobMetadata.java @@ -25,6 +25,9 @@ import org.jclouds.io.payloads.BaseMutableContentMetadata; import com.google.common.base.Function; import com.google.common.collect.ImmutableMap; +/** + * Converts ArchiveMetadata into BlobMetadata + */ public class ArchiveMetadataToBlobMetadata implements Function<ArchiveMetadata, MutableBlobMetadata> { @Override public MutableBlobMetadata apply(ArchiveMetadata from) { http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ListContainerOptionsToInventoryRetrievalJobRequest.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ListContainerOptionsToInventoryRetrievalJobRequest.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ListContainerOptionsToInventoryRetrievalJobRequest.java index 4bf5297..3c0ad4b 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ListContainerOptionsToInventoryRetrievalJobRequest.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ListContainerOptionsToInventoryRetrievalJobRequest.java @@ -21,6 +21,9 @@ import org.jclouds.glacier.domain.InventoryRetrievalJobRequest; import com.google.common.base.Function; +/** + * Converts ListContainerOptions into InventoryRetrievalJobRequest + */ public class ListContainerOptionsToInventoryRetrievalJobRequest implements Function<ListContainerOptions, InventoryRetrievalJobRequest> { @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/PaginatedVaultCollectionToStorageMetadata.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/PaginatedVaultCollectionToStorageMetadata.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/PaginatedVaultCollectionToStorageMetadata.java index 67e4d9c..51aba1b 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/PaginatedVaultCollectionToStorageMetadata.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/PaginatedVaultCollectionToStorageMetadata.java @@ -24,6 +24,9 @@ import org.jclouds.glacier.domain.PaginatedVaultCollection; import com.google.common.base.Function; import com.google.common.collect.Iterables; +/** + * Converts PaginatedVaultCollection into PageSet<StorageMetadata> + */ public class PaginatedVaultCollectionToStorageMetadata implements Function<PaginatedVaultCollection, PageSet<? extends StorageMetadata>> { @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/VaultMetadataToStorageMetadata.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/VaultMetadataToStorageMetadata.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/VaultMetadataToStorageMetadata.java index 54e8ba3..873747d 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/VaultMetadataToStorageMetadata.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/VaultMetadataToStorageMetadata.java @@ -24,6 +24,9 @@ import org.jclouds.glacier.domain.VaultMetadata; import com.google.common.base.Function; import com.google.common.collect.ImmutableMap; +/** + * Converts VaultMetadata into StorageMetadata + */ public class VaultMetadataToStorageMetadata implements Function<VaultMetadata, StorageMetadata> { @Override public StorageMetadata apply(VaultMetadata vault) { http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/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 deleted file mode 100644 index 1758460..0000000 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/ClearVaultStrategy.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.glacier.blobstore.strategy; - -import static com.google.common.base.Preconditions.checkNotNull; - -import org.jclouds.blobstore.options.ListContainerOptions; -import org.jclouds.blobstore.strategy.ClearListStrategy; -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; - -@Singleton -public class ClearVaultStrategy implements ClearListStrategy { - private final GlacierClient sync; - private final PollingStrategy pollingStrategy; - - @Inject - public ClearVaultStrategy(GlacierClient sync, PollingStrategy pollingStrategy) { - this.pollingStrategy = checkNotNull(pollingStrategy, "pollingStrategy"); - this.sync = checkNotNull(sync, "sync"); - } - - @Override - public void execute(String container, ListContainerOptions listContainerOptions) { - String jobId = sync.initiateJob(container, InventoryRetrievalJobRequest.builder().build()); - try { - if (pollingStrategy.waitForSuccess(container, jobId)) { - ArchiveMetadataCollection archives = sync.getInventoryRetrievalOutput(container, jobId); - for (ArchiveMetadata archive : archives) { - try { - sync.deleteArchive(container, archive.getArchiveId()); - } catch (ResourceNotFoundException ignored) { - } - } - } - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } -} http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/MultipartUploadStrategy.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/MultipartUploadStrategy.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/MultipartUploadStrategy.java index 3afb970..fd6b723 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/MultipartUploadStrategy.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/MultipartUploadStrategy.java @@ -18,6 +18,9 @@ package org.jclouds.glacier.blobstore.strategy; import org.jclouds.blobstore.domain.Blob; +/** + * Strategy for Multipart Uploads + */ public interface MultipartUploadStrategy { String execute(String container, Blob blob); } http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PayloadSlice.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PayloadSlice.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PayloadSlice.java index ca68da3..51fc029 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PayloadSlice.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PayloadSlice.java @@ -22,6 +22,9 @@ import static com.google.common.base.Preconditions.checkNotNull; import org.jclouds.glacier.util.ContentRange; import org.jclouds.io.Payload; +/** + * Represents an ordered part of data from a payload + */ public class PayloadSlice { private final Payload payload; private final ContentRange range; http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PollingStrategy.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PollingStrategy.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PollingStrategy.java index b208809..f5be082 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PollingStrategy.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PollingStrategy.java @@ -16,6 +16,9 @@ */ package org.jclouds.glacier.blobstore.strategy; +/** + * Strategy for polling jobs + */ public interface PollingStrategy { boolean waitForSuccess(String vault, String job) throws InterruptedException; } http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/SlicingStrategy.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/SlicingStrategy.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/SlicingStrategy.java index 03dc96c..ab986e2 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/SlicingStrategy.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/SlicingStrategy.java @@ -18,6 +18,9 @@ package org.jclouds.glacier.blobstore.strategy; import org.jclouds.io.Payload; +/** + * Strategy for payload slicing + */ public interface SlicingStrategy { public static final int MAX_LIST_PARTS_RETURNED = 1000; public static final int MAX_LIST_MPU_RETURNED = 1000; http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BasePollingStrategy.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BasePollingStrategy.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BasePollingStrategy.java index b9c90df..d4997ec 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BasePollingStrategy.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BasePollingStrategy.java @@ -26,7 +26,13 @@ import org.jclouds.glacier.domain.JobMetadata; import org.jclouds.glacier.domain.JobStatus; import com.google.inject.Inject; +import com.google.inject.Singleton; +/** + * Base implementation of PollingStrategy. + * This implementation waits a fixed amount of time before start polling. + */ +@Singleton public class BasePollingStrategy implements PollingStrategy { public static final long DEFAULT_INITIAL_WAIT = TimeUnit.HOURS.toMillis(3); public static final long DEFAULT_TIME_BETWEEN_POLLS = TimeUnit.MINUTES.toMillis(15); http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BaseSlicingStrategy.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BaseSlicingStrategy.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BaseSlicingStrategy.java index d5173a4..ebb42b5 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BaseSlicingStrategy.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BaseSlicingStrategy.java @@ -19,6 +19,8 @@ package org.jclouds.glacier.blobstore.strategy.internal; import static com.google.common.base.Preconditions.checkNotNull; import static java.lang.Math.sqrt; +import javax.inject.Singleton; + import org.jclouds.glacier.blobstore.strategy.PayloadSlice; import org.jclouds.glacier.blobstore.strategy.SlicingStrategy; import org.jclouds.glacier.util.ContentRange; @@ -28,6 +30,11 @@ import org.jclouds.io.PayloadSlicer; import com.google.inject.Inject; import com.google.inject.name.Named; +/** + * Base implementation of SlicingStrategy. + * This implementation slice a payload based on the (part size)/(number of parts) ratio. This ratio may be overriden. + */ +@Singleton public class BaseSlicingStrategy implements SlicingStrategy { public static final double DEFAULT_RATIO = 0.32; // (part size/number of parts) ratio http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/ClearVaultStrategy.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/ClearVaultStrategy.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/ClearVaultStrategy.java new file mode 100644 index 0000000..68dfe01 --- /dev/null +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/ClearVaultStrategy.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.glacier.blobstore.strategy.internal; + +import static com.google.common.base.Preconditions.checkNotNull; + +import org.jclouds.blobstore.options.ListContainerOptions; +import org.jclouds.blobstore.strategy.ClearListStrategy; +import org.jclouds.glacier.GlacierClient; +import org.jclouds.glacier.blobstore.strategy.PollingStrategy; +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; + +/** + * Implementation of ClearListStrategy. + * This is a long duration operation. + */ +@Singleton +public class ClearVaultStrategy implements ClearListStrategy { + private final GlacierClient sync; + private final PollingStrategy pollingStrategy; + + @Inject + public ClearVaultStrategy(GlacierClient sync, PollingStrategy pollingStrategy) { + this.pollingStrategy = checkNotNull(pollingStrategy, "pollingStrategy"); + this.sync = checkNotNull(sync, "sync"); + } + + @Override + public void execute(String container, ListContainerOptions listContainerOptions) { + String jobId = sync.initiateJob(container, InventoryRetrievalJobRequest.builder().build()); + try { + if (pollingStrategy.waitForSuccess(container, jobId)) { + ArchiveMetadataCollection archives = sync.getInventoryRetrievalOutput(container, jobId); + for (ArchiveMetadata archive : archives) { + try { + sync.deleteArchive(container, archive.getArchiveId()); + } catch (ResourceNotFoundException ignored) { + } + } + } + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java index 72368c5..4ef4468 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java @@ -27,7 +27,13 @@ import org.jclouds.glacier.blobstore.strategy.SlicingStrategy; import com.google.common.collect.ImmutableMap; import com.google.common.hash.HashCode; import com.google.inject.Inject; +import com.google.inject.Singleton; +/** + * Base implementation of MultipartUploadStrategy. + * This implementation uploads the parts sequentially. + */ +@Singleton public class SequentialMultipartUploadStrategy implements MultipartUploadStrategy { private final GlacierClient client; private final SlicingStrategy slicer;
