JCLOUDS-1337: Azure 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/152ca564
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/152ca564
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/152ca564

Branch: refs/heads/master
Commit: 152ca564b5e93aa3c8b7f94e1c65a44af6e04db0
Parents: 6158b60
Author: Andrew Gaul <[email protected]>
Authored: Tue Sep 26 21:21:33 2017 -0700
Committer: Andrew Gaul <[email protected]>
Committed: Thu Oct 12 11:15:14 2017 -0700

----------------------------------------------------------------------
 .../azureblob/blobstore/AzureBlobStore.java     | 15 ++++++++---
 .../functions/BlobPropertiesToBlobMetadata.java |  3 +++
 .../jclouds/azureblob/domain/AccessTier.java    | 28 +++++++++++++++++---
 3 files changed, 40 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/152ca564/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
----------------------------------------------------------------------
diff --git 
a/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
 
b/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
index a64db15..a2bf864 100644
--- 
a/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
+++ 
b/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
@@ -39,6 +39,7 @@ import 
org.jclouds.azureblob.blobstore.functions.BlobToAzureBlob;
 import org.jclouds.azureblob.blobstore.functions.ContainerToResourceMetadata;
 import 
org.jclouds.azureblob.blobstore.functions.ListBlobsResponseToResourceList;
 import org.jclouds.azureblob.blobstore.functions.ListOptionsToListBlobsOptions;
+import org.jclouds.azureblob.domain.AccessTier;
 import org.jclouds.azureblob.domain.AzureBlob;
 import org.jclouds.azureblob.domain.BlobBlockProperties;
 import org.jclouds.azureblob.domain.BlobProperties;
@@ -59,6 +60,7 @@ import org.jclouds.blobstore.domain.MultipartPart;
 import org.jclouds.blobstore.domain.MultipartUpload;
 import org.jclouds.blobstore.domain.PageSet;
 import org.jclouds.blobstore.domain.StorageMetadata;
+import org.jclouds.blobstore.domain.Tier;
 import org.jclouds.blobstore.domain.internal.PageSetImpl;
 import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
 import org.jclouds.blobstore.internal.BaseBlobStore;
@@ -215,7 +217,7 @@ public class AzureBlobStore extends BaseBlobStore {
     */
    @Override
    public String putBlob(String container, Blob blob) {
-      return sync.putBlob(container, blob2AzureBlob.apply(blob));
+      return putBlob(container, blob, new PutOptions());
    }
 
    /**
@@ -231,10 +233,17 @@ public class AzureBlobStore extends BaseBlobStore {
       if (options.getBlobAccess() != BlobAccess.PRIVATE) {
          throw new UnsupportedOperationException("blob access not supported by 
Azure");
       }
+      String eTag;
       if (options.isMultipart()) {
-         return putMultipartBlob(container, blob, options);
+         eTag = putMultipartBlob(container, blob, options);
+      } else {
+         eTag = sync.putBlob(container, blob2AzureBlob.apply(blob));
+      }
+      Tier tier = blob.getMetadata().getTier();
+      if (tier != Tier.STANDARD) {
+         sync.setBlobTier(container, blob.getMetadata().getName(), 
AccessTier.fromTier(tier));
       }
-      return putBlob(container, blob);
+      return eTag;
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/152ca564/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/functions/BlobPropertiesToBlobMetadata.java
----------------------------------------------------------------------
diff --git 
a/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/functions/BlobPropertiesToBlobMetadata.java
 
b/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/functions/BlobPropertiesToBlobMetadata.java
index 6bab7e4..6a1eb43 100644
--- 
a/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/functions/BlobPropertiesToBlobMetadata.java
+++ 
b/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/functions/BlobPropertiesToBlobMetadata.java
@@ -21,6 +21,7 @@ import static 
com.google.common.base.Preconditions.checkNotNull;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
+import org.jclouds.azureblob.domain.AccessTier;
 import org.jclouds.azureblob.domain.BlobProperties;
 import org.jclouds.azureblob.domain.PublicAccess;
 import org.jclouds.blobstore.domain.MutableBlobMetadata;
@@ -67,6 +68,8 @@ public class BlobPropertiesToBlobMetadata implements 
Function<BlobProperties, Mu
          to.setType(StorageType.BLOB);
       }
       to.setSize(from.getContentMetadata().getContentLength());
+      AccessTier tier = from.getTier();
+      to.setTier((tier != null ? tier : AccessTier.HOT).toTier());
       return to;
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/152ca564/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/AccessTier.java
----------------------------------------------------------------------
diff --git 
a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/AccessTier.java
 
b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/AccessTier.java
index 02f03ca..3c99ef6 100644
--- 
a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/AccessTier.java
+++ 
b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/AccessTier.java
@@ -18,12 +18,20 @@ package org.jclouds.azureblob.domain;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
+import org.jclouds.blobstore.domain.Tier;
+
 import com.google.common.base.CaseFormat;
 
 public enum AccessTier {
-   HOT,
-   COOL,
-   ARCHIVE;
+   HOT(Tier.STANDARD),
+   COOL(Tier.INFREQUENT),
+   ARCHIVE(Tier.ARCHIVE);
+
+   private final Tier tier;
+
+   private AccessTier(Tier tier) {
+      this.tier = checkNotNull(tier);
+   }
 
    public String value() {
       return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, name());
@@ -34,7 +42,21 @@ public enum AccessTier {
       return value();
    }
 
+   // TODO: call valueOf instead like GCS?
    public static AccessTier fromValue(String tier) {
       return valueOf(CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, 
checkNotNull(tier, "tier")));
    }
+
+   public static AccessTier fromTier(Tier tier) {
+      switch (tier) {
+      case STANDARD: return AccessTier.HOT;
+      case INFREQUENT: return AccessTier.COOL;
+      case ARCHIVE: return AccessTier.ARCHIVE;
+      }
+      throw new IllegalArgumentException("invalid tier: " + tier);
+   }
+
+   public Tier toTier() {
+      return tier;
+   }
 }

Reply via email to