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);
+      }
+   }
 }