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 2015/12/23 07:38:10 UTC

[1/6] jclouds git commit: JCLOUDS-844: Atmos putBlob ACLs

Repository: jclouds
Updated Branches:
  refs/heads/master 37f307ecd -> 91b202f4e


JCLOUDS-844: Atmos putBlob ACLs


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/cc0d0d40
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/cc0d0d40
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/cc0d0d40

Branch: refs/heads/master
Commit: cc0d0d40c5076b835d88ba8cc11e3167f957d115
Parents: c0d72b6
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Dec 21 17:48:16 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue Dec 22 00:46:33 2015 -0800

----------------------------------------------------------------------
 .../jclouds/atmos/blobstore/AtmosBlobStore.java | 29 ++++++++++++--------
 .../integration/AtmosIntegrationLiveTest.java   |  6 ++++
 2 files changed, 24 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/cc0d0d40/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
index 9e11ff8..6516198 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
@@ -231,14 +231,7 @@ public class AtmosBlobStore extends BaseBlobStore {
     */
    @Override
    public String putBlob(final String container, final Blob blob) {
-      final org.jclouds.atmos.options.PutOptions options = new org.jclouds.atmos.options.PutOptions();
-      try {
-         if (isPublic.getUnchecked(container + "/"))
-            options.publicRead();
-      } catch (CacheLoader.InvalidCacheLoadException e) {
-         // nulls not permitted
-      }
-      return AtmosUtils.putBlob(sync, crypto, blob2Object, container, blob, options);
+      return putBlob(container, blob, PutOptions.NONE);
    }
 
    /**
@@ -248,8 +241,22 @@ public class AtmosBlobStore extends BaseBlobStore {
     */
    @Override
    public String putBlob(String container, Blob blob, PutOptions options) {
-      // TODO implement options
-      return putBlob(container, blob);
+      if (options.isMultipart()) {
+         throw new UnsupportedOperationException("Atmos does not support multipart uploads");
+      }
+      org.jclouds.atmos.options.PutOptions atmosOptions = new org.jclouds.atmos.options.PutOptions();
+      atmosOptions.publicNone();
+      try {
+         // TODO: not needed
+         if (isPublic.getUnchecked(container + "/"))
+            atmosOptions.publicRead();
+      } catch (CacheLoader.InvalidCacheLoadException e) {
+         // nulls not permitted
+      }
+      if (options.getBlobAccess() == BlobAccess.PUBLIC_READ) {
+         atmosOptions.publicRead();
+      }
+      return AtmosUtils.putBlob(sync, crypto, blob2Object, container, blob, atmosOptions);
    }
 
    /**
@@ -289,7 +296,7 @@ public class AtmosBlobStore extends BaseBlobStore {
    }
 
    @Override
-   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata) {
+   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, PutOptions options) {
       throw new UnsupportedOperationException("Atmos does not support multipart uploads");
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/cc0d0d40/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosIntegrationLiveTest.java b/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosIntegrationLiveTest.java
index 1e5263c..ee2590d 100644
--- a/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosIntegrationLiveTest.java
+++ b/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosIntegrationLiveTest.java
@@ -150,4 +150,10 @@ public class AtmosIntegrationLiveTest extends BaseBlobIntegrationTest {
    public void testPutMultipartInputStream() throws Exception {
       throw new SkipException("Atmos does not support multipart uploads");
    }
+
+   @Override
+   @Test(groups = { "integration", "live" }, expectedExceptions = UnsupportedOperationException.class)
+   public void testPutBlobAccessMultipart() throws Exception {
+      super.testPutBlobAccessMultipart();
+   }
 }


[5/6] jclouds git commit: JCLOUDS-844: S3 putBlob ACLs

Posted by ga...@apache.org.
JCLOUDS-844: S3 putBlob ACLs


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/85951e2a
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/85951e2a
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/85951e2a

Branch: refs/heads/master
Commit: 85951e2af9be28b8669c709b72676b834d0a1245
Parents: f926944
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Dec 21 16:52:54 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue Dec 22 00:46:34 2015 -0800

----------------------------------------------------------------------
 .../java/org/jclouds/s3/blobstore/S3BlobStore.java     | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/85951e2a/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java b/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
index a72f9e9..4cb5ea2 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
@@ -265,6 +265,9 @@ public class S3BlobStore extends BaseBlobStore {
       }
 
       PutObjectOptions options = new PutObjectOptions();
+      if (overrides.getBlobAccess() == BlobAccess.PUBLIC_READ) {
+         options = options.withAcl(CannedAccessPolicy.PUBLIC_READ);
+      }
       return sync.putObject(container, blob2Object.apply(blob), options);
    }
 
@@ -344,9 +347,13 @@ public class S3BlobStore extends BaseBlobStore {
    }
 
    @Override
-   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata) {
-      String id = sync.initiateMultipartUpload(container, blob2ObjectMetadata.apply(blobMetadata));
-      return MultipartUpload.create(container, blobMetadata.getName(), id, blobMetadata);
+   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, PutOptions overrides) {
+      PutObjectOptions options = new PutObjectOptions();
+      if (overrides.getBlobAccess() == BlobAccess.PUBLIC_READ) {
+         options = options.withAcl(CannedAccessPolicy.PUBLIC_READ);
+      }
+      String id = sync.initiateMultipartUpload(container, blob2ObjectMetadata.apply(blobMetadata), options);
+      return MultipartUpload.create(container, blobMetadata.getName(), id, blobMetadata, overrides);
    }
 
    @Override


[2/6] jclouds git commit: JCLOUDS-844: Portable putBlob ACLs

Posted by ga...@apache.org.
JCLOUDS-844: Portable putBlob ACLs


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/86491bc6
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/86491bc6
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/86491bc6

Branch: refs/heads/master
Commit: 86491bc6079cbf29ce885822c7e0147cc7d211d1
Parents: 37f307e
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Dec 21 16:51:50 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue Dec 22 00:46:33 2015 -0800

----------------------------------------------------------------------
 .../org/jclouds/s3/blobstore/S3BlobStore.java   |  1 -
 .../java/org/jclouds/blobstore/BlobStore.java   |  2 +-
 .../blobstore/config/LocalBlobStore.java        |  6 ++-
 .../blobstore/domain/MultipartUpload.java       |  8 +++-
 .../blobstore/internal/BaseBlobStore.java       |  2 +-
 .../jclouds/blobstore/options/PutOptions.java   | 26 +++++++++++-
 .../blobstore/util/ForwardingBlobStore.java     |  4 +-
 .../blobstore/util/ReadOnlyBlobStore.java       |  2 +-
 .../internal/BaseBlobIntegrationTest.java       | 44 ++++++++++++++++++--
 9 files changed, 81 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/86491bc6/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java b/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
index 37f264e..a72f9e9 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
@@ -264,7 +264,6 @@ public class S3BlobStore extends BaseBlobStore {
          return putMultipartBlob(container, blob, overrides);
       }
 
-      // TODO: Make use of options overrides
       PutObjectOptions options = new PutObjectOptions();
       return sync.putObject(container, blob2Object.apply(blob), options);
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/86491bc6/blobstore/src/main/java/org/jclouds/blobstore/BlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/BlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/BlobStore.java
index 3bbe708..4cbc92e 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/BlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/BlobStore.java
@@ -333,7 +333,7 @@ public interface BlobStore {
    long countBlobs(String container, ListContainerOptions options);
 
    @Beta
-   MultipartUpload initiateMultipartUpload(String container, BlobMetadata blob);
+   MultipartUpload initiateMultipartUpload(String container, BlobMetadata blob, PutOptions options);
 
    @Beta
    // TODO: take parts?

http://git-wip-us.apache.org/repos/asf/jclouds/blob/86491bc6/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
index 08a49e3..214dd5d 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
@@ -750,9 +750,9 @@ public final class LocalBlobStore implements BlobStore {
    }
 
    @Override
-   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata) {
+   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, PutOptions options) {
       return MultipartUpload.create(container, blobMetadata.getName(), UUID.randomUUID().toString(),
-            blobMetadata);
+            blobMetadata, options);
    }
 
    @Override
@@ -809,6 +809,8 @@ public final class LocalBlobStore implements BlobStore {
          storageStrategy.removeBlob(mpu.containerName(), mpu.blobName() + "-" + part.partNumber());
       }
 
+      setBlobAccess(mpu.containerName(), mpu.blobName(), mpu.putOptions().getBlobAccess());
+
       return eTag;
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/86491bc6/blobstore/src/main/java/org/jclouds/blobstore/domain/MultipartUpload.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/domain/MultipartUpload.java b/blobstore/src/main/java/org/jclouds/blobstore/domain/MultipartUpload.java
index d70c3ec..94f2401 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/domain/MultipartUpload.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/domain/MultipartUpload.java
@@ -17,6 +17,8 @@
 
 package org.jclouds.blobstore.domain;
 
+import org.jclouds.blobstore.options.PutOptions;
+
 import com.google.auto.value.AutoValue;
 
 @AutoValue
@@ -25,8 +27,10 @@ public abstract class MultipartUpload {
    public abstract String blobName();
    public abstract String id();
    public abstract BlobMetadata blobMetadata();
+   public abstract PutOptions putOptions();
 
-   public static MultipartUpload create(String containerName, String blobName, String id, BlobMetadata blobMetadata) {
-      return new AutoValue_MultipartUpload(containerName, blobName, id, blobMetadata);
+   public static MultipartUpload create(String containerName, String blobName, String id, BlobMetadata blobMetadata,
+         PutOptions putOptions) {
+      return new AutoValue_MultipartUpload(containerName, blobName, id, blobMetadata, putOptions);
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/86491bc6/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java
index 5876985..a608b18 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java
@@ -290,7 +290,7 @@ public abstract class BaseBlobStore implements BlobStore {
    // TODO: parallel uploads
    @Beta
    protected String putMultipartBlob(String container, Blob blob, PutOptions overrides) {
-      MultipartUpload mpu = initiateMultipartUpload(container, blob.getMetadata());
+      MultipartUpload mpu = initiateMultipartUpload(container, blob.getMetadata(), overrides);
       List<MultipartPart> parts = Lists.newArrayList();
       long contentLength = blob.getMetadata().getContentMetadata().getContentLength();
       MultipartUploadSlicingAlgorithm algorithm = new MultipartUploadSlicingAlgorithm(

http://git-wip-us.apache.org/repos/asf/jclouds/blob/86491bc6/blobstore/src/main/java/org/jclouds/blobstore/options/PutOptions.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/options/PutOptions.java b/blobstore/src/main/java/org/jclouds/blobstore/options/PutOptions.java
index 813aeaa..4cb8ca2 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/options/PutOptions.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/options/PutOptions.java
@@ -16,6 +16,10 @@
  */
 package org.jclouds.blobstore.options;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.blobstore.domain.BlobAccess;
+
 /**
  * Contains options supported in the put blob operation. <h2>
  * Usage</h2> The recommended way to instantiate a PutOptions object is to statically import
@@ -30,6 +34,7 @@ public class PutOptions implements Cloneable {
 
    public static final ImmutablePutOptions NONE = new ImmutablePutOptions(new PutOptions());
 
+   private BlobAccess blobAccess = BlobAccess.PRIVATE;
    private boolean multipart = false;
 
    public PutOptions() {
@@ -47,6 +52,16 @@ public class PutOptions implements Cloneable {
       }
 
       @Override
+      public BlobAccess getBlobAccess() {
+         return delegate.getBlobAccess();
+      }
+
+      @Override
+      public PutOptions setBlobAccess(BlobAccess blobAccess) {
+         throw new UnsupportedOperationException();
+      }
+
+      @Override
       public boolean isMultipart() {
          return delegate.isMultipart();
       }
@@ -68,6 +83,15 @@ public class PutOptions implements Cloneable {
 
    }
 
+   public BlobAccess getBlobAccess() {
+      return blobAccess;
+   }
+
+   public PutOptions setBlobAccess(BlobAccess blobAccess) {
+      this.blobAccess = checkNotNull(blobAccess);
+      return this;
+   }
+
    public boolean isMultipart() {
       return multipart;
    }
@@ -115,6 +139,6 @@ public class PutOptions implements Cloneable {
 
    @Override
    public String toString() {
-      return "[multipart=" + multipart + "]";
+      return "[multipart=" + multipart + ", blobAccess=" + blobAccess + "]";
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/86491bc6/blobstore/src/main/java/org/jclouds/blobstore/util/ForwardingBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/util/ForwardingBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/util/ForwardingBlobStore.java
index 77f01f6..2a4631b 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/util/ForwardingBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/util/ForwardingBlobStore.java
@@ -220,8 +220,8 @@ public abstract class ForwardingBlobStore extends ForwardingObject
    }
 
    @Override
-   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata) {
-      return delegate().initiateMultipartUpload(container, blobMetadata);
+   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, PutOptions options) {
+      return delegate().initiateMultipartUpload(container, blobMetadata, options);
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/86491bc6/blobstore/src/main/java/org/jclouds/blobstore/util/ReadOnlyBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/util/ReadOnlyBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/util/ReadOnlyBlobStore.java
index 0fd06ee..3cfbb73 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/util/ReadOnlyBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/util/ReadOnlyBlobStore.java
@@ -136,7 +136,7 @@ public final class ReadOnlyBlobStore extends ForwardingBlobStore {
    }
 
    @Override
-   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata) {
+   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, PutOptions options) {
       throw new UnsupportedOperationException("Read-only BlobStore");
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/86491bc6/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
----------------------------------------------------------------------
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
index cdcdec6..0240602 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
@@ -674,6 +674,44 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
       }
    }
 
+   @Test(groups = { "integration", "live" })
+   public void testPutBlobAccess() throws Exception {
+      BlobStore blobStore = view.getBlobStore();
+      String containerName = getContainerName();
+      try {
+         String blobNamePrivate = "put-access-blob-name-private";
+         Blob blobPrivate = blobStore.blobBuilder(blobNamePrivate).payload(new byte[1]).build();
+         blobStore.putBlob(containerName, blobPrivate, new PutOptions().setBlobAccess(BlobAccess.PRIVATE));
+         assertThat(blobStore.getBlobAccess(containerName, blobNamePrivate)).isEqualTo(BlobAccess.PRIVATE);
+
+         String blobNamePublic = "put-access-blob-name-public";
+         Blob blobPublic = blobStore.blobBuilder(blobNamePublic).payload(new byte[1]).build();
+         blobStore.putBlob(containerName, blobPublic, new PutOptions().setBlobAccess(BlobAccess.PUBLIC_READ));
+         assertThat(blobStore.getBlobAccess(containerName, blobNamePublic)).isEqualTo(BlobAccess.PUBLIC_READ);
+      } finally {
+         returnContainer(containerName);
+      }
+   }
+
+   @Test(groups = { "integration", "live" })
+   public void testPutBlobAccessMultipart() throws Exception {
+      BlobStore blobStore = view.getBlobStore();
+      String containerName = getContainerName();
+      try {
+         String blobNamePrivate = "put-access-blob-name-private";
+         Blob blobPrivate = blobStore.blobBuilder(blobNamePrivate).payload(new byte[1]).build();
+         blobStore.putBlob(containerName, blobPrivate, new PutOptions().setBlobAccess(BlobAccess.PRIVATE).multipart(true));
+         assertThat(blobStore.getBlobAccess(containerName, blobNamePrivate)).isEqualTo(BlobAccess.PRIVATE);
+
+         String blobNamePublic = "put-access-blob-name-public";
+         Blob blobPublic = blobStore.blobBuilder(blobNamePublic).payload(new byte[1]).build();
+         blobStore.putBlob(containerName, blobPublic, new PutOptions().setBlobAccess(BlobAccess.PUBLIC_READ).multipart(true));
+         assertThat(blobStore.getBlobAccess(containerName, blobNamePublic)).isEqualTo(BlobAccess.PUBLIC_READ);
+      } finally {
+         returnContainer(containerName);
+      }
+   }
+
    protected void checkUserMetadata(Map<String, String> userMetadata1, Map<String, String> userMetadata2) {
       assertThat(userMetadata1).isEqualTo(userMetadata2);
    }
@@ -900,7 +938,7 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
       try {
          String name = "blob-name";
          Blob blob = blobStore.blobBuilder(name).build();
-         MultipartUpload mpu = blobStore.initiateMultipartUpload(container, blob.getMetadata());
+         MultipartUpload mpu = blobStore.initiateMultipartUpload(container, blob.getMetadata(), new PutOptions());
 
          List<MultipartPart> parts = blobStore.listMultipartUpload(mpu);
          assertThat(parts).isEqualTo(ImmutableList.of());
@@ -926,7 +964,7 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
                .payload(new byte[0]);
          addContentMetadata(blobBuilder);
          Blob blob = blobBuilder.build();
-         MultipartUpload mpu = blobStore.initiateMultipartUpload(container, blob.getMetadata());
+         MultipartUpload mpu = blobStore.initiateMultipartUpload(container, blob.getMetadata(), new PutOptions());
 
          ByteSource byteSource = TestUtils.randomByteSource().slice(0, 1);
          Payload payload = Payloads.newByteSourcePayload(byteSource);
@@ -960,7 +998,7 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
                .payload(new byte[0]);
          addContentMetadata(blobBuilder);
          Blob blob = blobBuilder.build();
-         MultipartUpload mpu = blobStore.initiateMultipartUpload(container, blob.getMetadata());
+         MultipartUpload mpu = blobStore.initiateMultipartUpload(container, blob.getMetadata(), new PutOptions());
 
          ByteSource byteSource = TestUtils.randomByteSource().slice(0, blobStore.getMinimumMultipartPartSize() + 1);
          ByteSource byteSource1 = byteSource.slice(0, blobStore.getMinimumMultipartPartSize());


[3/6] jclouds git commit: JCLOUDS-844: Local blobstore putBlob ACLs

Posted by ga...@apache.org.
JCLOUDS-844: Local blobstore putBlob ACLs


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/c0d72b6f
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/c0d72b6f
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/c0d72b6f

Branch: refs/heads/master
Commit: c0d72b6f5316a78695fa4effcdc61946f2c83157
Parents: 86491bc
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Dec 21 16:52:13 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue Dec 22 00:46:33 2015 -0800

----------------------------------------------------------------------
 .../blobstore/config/LocalBlobStore.java        | 49 ++++++++++----------
 1 file changed, 25 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/c0d72b6f/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
index 214dd5d..06b3367 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
@@ -520,28 +520,7 @@ public final class LocalBlobStore implements BlobStore {
 
    @Override
    public String putBlob(String containerName, Blob blob) {
-      checkNotNull(containerName, "containerName must be set");
-      checkNotNull(blob, "blob must be set");
-      String blobKey = blob.getMetadata().getName();
-
-      logger.debug("Put blob with key [%s] to container [%s]", blobKey, containerName);
-      if (!storageStrategy.containerExists(containerName)) {
-         throw cnfe(containerName);
-      }
-
-      try {
-         return storageStrategy.putBlob(containerName, blob);
-      } catch (IOException e) {
-         String message = e.getMessage();
-         if (message != null && message.startsWith("MD5 hash code mismatch")) {
-            HttpResponseException exception = returnResponseException(400);
-            exception.initCause(e);
-            throw exception;
-         }
-         logger.error(e, "An error occurred storing the new blob with name [%s] to container [%s].", blobKey,
-               containerName);
-         throw propagate(e);
-      }
+      return putBlob(containerName, blob, PutOptions.NONE);
    }
 
    @Override
@@ -740,8 +719,30 @@ public final class LocalBlobStore implements BlobStore {
 
    @Override
    public String putBlob(String containerName, Blob blob, PutOptions options) {
-      // TODO implement options
-      return putBlob(containerName, blob);
+      checkNotNull(containerName, "containerName must be set");
+      checkNotNull(blob, "blob must be set");
+      String blobKey = blob.getMetadata().getName();
+
+      logger.debug("Put blob with key [%s] to container [%s]", blobKey, containerName);
+      if (!storageStrategy.containerExists(containerName)) {
+         throw cnfe(containerName);
+      }
+
+      try {
+         String eTag = storageStrategy.putBlob(containerName, blob);
+         setBlobAccess(containerName, blobKey, options.getBlobAccess());
+         return eTag;
+      } catch (IOException e) {
+         String message = e.getMessage();
+         if (message != null && message.startsWith("MD5 hash code mismatch")) {
+            HttpResponseException exception = returnResponseException(400);
+            exception.initCause(e);
+            throw exception;
+         }
+         logger.error(e, "An error occurred storing the new blob with name [%s] to container [%s].", blobKey,
+               containerName);
+         throw propagate(e);
+      }
    }
 
    @Override


[4/6] jclouds git commit: JCLOUDS-844: Azure putBlob ACLs

Posted by ga...@apache.org.
JCLOUDS-844: Azure putBlob ACLs


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/f9269449
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/f9269449
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/f9269449

Branch: refs/heads/master
Commit: f92694494956d84b58da36a9e4acb73bcbb03f37
Parents: cc0d0d4
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Dec 21 17:54:10 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue Dec 22 00:46:34 2015 -0800

----------------------------------------------------------------------
 .../org/jclouds/azureblob/blobstore/AzureBlobStore.java   |  7 +++++--
 .../integration/AzureBlobIntegrationLiveTest.java         | 10 ++++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/f9269449/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 4702a05..c4ecf6c 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
@@ -223,6 +223,9 @@ public class AzureBlobStore extends BaseBlobStore {
     */
    @Override
    public String putBlob(String container, Blob blob, PutOptions options) {
+      if (options.getBlobAccess() != BlobAccess.PRIVATE) {
+         throw new UnsupportedOperationException("blob access not supported by Azure");
+      }
       if (options.isMultipart()) {
          return putMultipartBlob(container, blob, options);
       }
@@ -374,9 +377,9 @@ public class AzureBlobStore extends BaseBlobStore {
    }
 
    @Override
-   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata) {
+   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, PutOptions options) {
       String uploadId = UUID.randomUUID().toString();
-      return MultipartUpload.create(container, blobMetadata.getName(), uploadId, blobMetadata);
+      return MultipartUpload.create(container, blobMetadata.getName(), uploadId, blobMetadata, options);
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/f9269449/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/integration/AzureBlobIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/integration/AzureBlobIntegrationLiveTest.java b/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/integration/AzureBlobIntegrationLiveTest.java
index a1f5538..1799d3d 100644
--- a/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/integration/AzureBlobIntegrationLiveTest.java
+++ b/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/integration/AzureBlobIntegrationLiveTest.java
@@ -55,6 +55,16 @@ public class AzureBlobIntegrationLiveTest extends BaseBlobIntegrationTest {
       throw new SkipException("unsupported in Azure");
    }
 
+   @Test(groups = { "integration", "live" }, expectedExceptions = UnsupportedOperationException.class)
+   public void testPutBlobAccess() throws Exception {
+      super.testPutBlobAccess();
+   }
+
+   @Test(groups = { "integration", "live" }, expectedExceptions = UnsupportedOperationException.class)
+   public void testPutBlobAccessMultipart() throws Exception {
+      super.testPutBlobAccessMultipart();
+   }
+
    @Override
    @Test
    public void testGetRange() {


[6/6] jclouds git commit: JCLOUDS-844: Swift putBlob ACLs

Posted by ga...@apache.org.
JCLOUDS-844: Swift putBlob ACLs


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/91b202f4
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/91b202f4
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/91b202f4

Branch: refs/heads/master
Commit: 91b202f4ea7728f043987657259ea5115a648bf3
Parents: 85951e2
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Dec 21 17:06:01 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue Dec 22 00:46:34 2015 -0800

----------------------------------------------------------------------
 .../v1/blobstore/RegionScopedSwiftBlobStore.java    | 16 +++++++++++-----
 .../integration/SwiftBlobIntegrationLiveTest.java   | 12 ++++++++++++
 2 files changed, 23 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/91b202f4/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java
----------------------------------------------------------------------
diff --git a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java
index 692401c..779665d 100644
--- a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java
+++ b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java
@@ -237,6 +237,9 @@ public class RegionScopedSwiftBlobStore implements BlobStore {
 
    @Override
    public String putBlob(String container, Blob blob, PutOptions options) {
+      if (options.getBlobAccess() != BlobAccess.PRIVATE) {
+         throw new UnsupportedOperationException("blob access not supported by swift");
+      }
       if (options.isMultipart()) {
          return putMultipartBlob(container, blob, options);
       }
@@ -410,16 +413,19 @@ public class RegionScopedSwiftBlobStore implements BlobStore {
    }
 
    @Override
-   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata) {
-      return initiateMultipartUpload(container, blobMetadata, 0);
+   public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, PutOptions options) {
+      if (options.getBlobAccess() != BlobAccess.PRIVATE) {
+         throw new UnsupportedOperationException("blob ACLs not supported in swift");
+      }
+      return initiateMultipartUpload(container, blobMetadata, 0, options);
    }
 
-   private MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, long partSize) {
+   private MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, long partSize, PutOptions options) {
       Long contentLength = blobMetadata.getContentMetadata().getContentLength();
       String uploadId = String.format("%s/slo/%.6f/%s/%s", blobMetadata.getName(),
               System.currentTimeMillis() / 1000.0, contentLength == null ? Long.valueOf(0) : contentLength,
               partSize);
-      return MultipartUpload.create(container, blobMetadata.getName(), uploadId, blobMetadata);
+      return MultipartUpload.create(container, blobMetadata.getName(), uploadId, blobMetadata, options);
    }
 
    @Override
@@ -555,7 +561,7 @@ public class RegionScopedSwiftBlobStore implements BlobStore {
       MultipartUploadSlicingAlgorithm algorithm = new MultipartUploadSlicingAlgorithm(
             getMinimumMultipartPartSize(), getMaximumMultipartPartSize(), getMaximumNumberOfParts());
       long partSize = algorithm.calculateChunkSize(contentLength);
-      MultipartUpload mpu = initiateMultipartUpload(container, blob.getMetadata(), partSize);
+      MultipartUpload mpu = initiateMultipartUpload(container, blob.getMetadata(), partSize, overrides);
       int partNumber = 1;
       for (Payload payload : slicer.slice(blob.getPayload(), partSize)) {
          MultipartPart part = uploadMultipartPart(mpu, partNumber, payload);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/91b202f4/apis/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/integration/SwiftBlobIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/integration/SwiftBlobIntegrationLiveTest.java b/apis/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/integration/SwiftBlobIntegrationLiveTest.java
index e25306f..6f62958 100644
--- a/apis/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/integration/SwiftBlobIntegrationLiveTest.java
+++ b/apis/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/integration/SwiftBlobIntegrationLiveTest.java
@@ -80,6 +80,18 @@ public class SwiftBlobIntegrationLiveTest extends BaseBlobIntegrationTest {
    }
 
    @Override
+   @Test(expectedExceptions = UnsupportedOperationException.class)
+   public void testPutBlobAccess() throws Exception {
+      super.testPutBlobAccess();
+   }
+
+   @Override
+   @Test(expectedExceptions = UnsupportedOperationException.class)
+   public void testPutBlobAccessMultipart() throws Exception {
+      super.testPutBlobAccessMultipart();
+   }
+
+   @Override
    protected long getMinimumMultipartBlobSize() {
       return 1;
    }