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:11 UTC
[2/6] jclouds git commit: JCLOUDS-844: Portable putBlob ACLs
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());