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 2017/10/15 05:14:35 UTC
[4/5] jclouds git commit: JCLOUDS-1337: GCS putBlob portable storage
tiers
JCLOUDS-1337: GCS putBlob portable storage tiers
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/14c41ea1
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/14c41ea1
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/14c41ea1
Branch: refs/heads/master
Commit: 14c41ea1331e4cae8a563c8bb8615b64362eefb2
Parents: 61d4be8
Author: Andrew Gaul <ga...@apache.org>
Authored: Tue Oct 10 23:08:22 2017 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Oct 12 11:15:14 2017 -0700
----------------------------------------------------------------------
.../blobstore/GoogleCloudStorageBlobStore.java | 12 ++++---
.../functions/BlobMetadataToObjectTemplate.java | 4 ++-
.../functions/ObjectToBlobMetadata.java | 1 +
.../domain/DomainResourceReferences.java | 33 +++++++++++++++++---
...ogleCloudStorageBlobIntegrationLiveTest.java | 21 +++++++++++++
5 files changed, 60 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/14c41ea1/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 532a8de..a5f1338 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
@@ -66,7 +66,6 @@ import org.jclouds.googlecloudstorage.domain.templates.BucketTemplate;
import org.jclouds.googlecloudstorage.domain.templates.ComposeObjectTemplate;
import org.jclouds.googlecloudstorage.domain.templates.ObjectAccessControlsTemplate;
import org.jclouds.googlecloudstorage.domain.templates.ObjectTemplate;
-import org.jclouds.googlecloudstorage.options.InsertObjectOptions;
import org.jclouds.googlecloudstorage.options.ListObjectOptions;
import org.jclouds.http.HttpResponseException;
import org.jclouds.io.ContentMetadata;
@@ -392,6 +391,8 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
}
ObjectTemplate destination = blobMetadataToObjectTemplate.apply(mpu.blobMetadata());
+ // unset storage class because the subobjects store this state
+ destination.storageClass(DomainResourceReferences.StorageClass.STANDARD);
if (mpu.putOptions().getBlobAccess() == BlobAccess.PUBLIC_READ) {
ObjectAccessControls controls = ObjectAccessControls.builder()
.entity("allUsers")
@@ -421,10 +422,11 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) {
String partName = getMPUPartName(mpu, partNumber);
long partSize = payload.getContentMetadata().getContentLength();
- // TODO: JCLOUDS-1337: use multipartUpload to set storage class
- InsertObjectOptions insertOptions = new InsertObjectOptions().name(partName);
- GoogleCloudStorageObject object = api.getObjectApi().simpleUpload(mpu.containerName(),
- mpu.blobMetadata().getContentMetadata().getContentType(), partSize, payload, insertOptions);
+ ObjectTemplate template = blobMetadataToObjectTemplate.apply(mpu.blobMetadata())
+ .name(partName)
+ .size(partSize);
+ GoogleCloudStorageObject object = api.getObjectApi().multipartUpload(
+ mpu.containerName(), template, payload);
return MultipartPart.create(partNumber, partSize, object.etag(), object.updated());
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/14c41ea1/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobMetadataToObjectTemplate.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobMetadataToObjectTemplate.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobMetadataToObjectTemplate.java
index e40ce49..2f40be3 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobMetadataToObjectTemplate.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobMetadataToObjectTemplate.java
@@ -21,6 +21,7 @@ import static com.google.common.io.BaseEncoding.base64;
import java.util.Map;
import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.StorageClass;
import org.jclouds.googlecloudstorage.domain.templates.ObjectTemplate;
import org.jclouds.io.ContentMetadata;
@@ -47,7 +48,8 @@ public class BlobMetadataToObjectTemplate implements Function<BlobMetadata, Obje
ObjectTemplate template = new ObjectTemplate().contentType(contentType).size(contentLength)
.contentEncoding(contentEncoding).contentLanguage(contentLanguage)
- .contentDisposition(contentDisposition).name(name).customMetadata(userMeta);
+ .contentDisposition(contentDisposition).name(name).customMetadata(userMeta)
+ .storageClass(StorageClass.fromTier(from.getTier()));
if (md5 != null) {
template.md5Hash(base64().encode(md5.asBytes()));
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/14c41ea1/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectToBlobMetadata.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectToBlobMetadata.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectToBlobMetadata.java
index 4a6cf7d..66ab25a 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectToBlobMetadata.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectToBlobMetadata.java
@@ -50,6 +50,7 @@ public class ObjectToBlobMetadata implements Function<GoogleCloudStorageObject,
to.setPublicUri(from.mediaLink());
to.setType(StorageType.BLOB);
to.setSize(from.size());
+ to.setTier(from.storageClass().toTier());
return to;
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/14c41ea1/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java
----------------------------------------------------------------------
diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java
index cc3b9dc..f27b08f 100644
--- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java
+++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/DomainResourceReferences.java
@@ -16,6 +16,10 @@
*/
package org.jclouds.googlecloudstorage.domain;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.blobstore.domain.Tier;
+
import com.google.common.base.CaseFormat;
public final class DomainResourceReferences {
@@ -45,11 +49,30 @@ public final class DomainResourceReferences {
}
public enum StorageClass {
- COLDLINE,
- DURABLE_REDUCED_AVAILABILITY,
- MULTI_REGIONAL,
- NEARLINE,
- STANDARD;
+ COLDLINE(Tier.ARCHIVE),
+ DURABLE_REDUCED_AVAILABILITY(Tier.STANDARD),
+ MULTI_REGIONAL(Tier.STANDARD),
+ NEARLINE(Tier.INFREQUENT),
+ STANDARD(Tier.STANDARD);
+
+ private final Tier tier;
+
+ private StorageClass(Tier tier) {
+ this.tier = checkNotNull(tier, "tier");
+ }
+
+ public static StorageClass fromTier(Tier tier) {
+ switch (tier) {
+ case STANDARD: return StorageClass.STANDARD;
+ case INFREQUENT: return StorageClass.NEARLINE;
+ case ARCHIVE: return StorageClass.COLDLINE;
+ }
+ throw new IllegalArgumentException("invalid tier: " + tier);
+ }
+
+ public Tier toTier() {
+ return tier;
+ }
}
public enum Projection {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/14c41ea1/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 524ac20..d1866a9 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
@@ -17,6 +17,7 @@
package org.jclouds.googlecloudstorage.blobstore.integration;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Fail.failBecauseExceptionWasNotThrown;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
@@ -310,4 +311,24 @@ public class GoogleCloudStorageBlobIntegrationLiveTest extends BaseBlobIntegrati
throw new SkipException("GCS does not support listing multipart uploads", uoe);
}
}
+
+ @Override
+ public void testPutBlobTierArchiveMultipart() throws Exception {
+ try {
+ super.testPutBlobTierArchiveMultipart();
+ failBecauseExceptionWasNotThrown(AssertionError.class);
+ } catch (AssertionError ae) {
+ throw new SkipException("GCS does not report storage class of composed objects", ae);
+ }
+ }
+
+ @Override
+ public void testPutBlobTierInfrequentMultipart() throws Exception {
+ try {
+ super.testPutBlobTierInfrequentMultipart();
+ failBecauseExceptionWasNotThrown(AssertionError.class);
+ } catch (AssertionError ae) {
+ throw new SkipException("GCS does not report storage class of composed objects", ae);
+ }
+ }
}