This is an automated email from the ASF dual-hosted git repository.

gaul pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jclouds.git


The following commit(s) were added to refs/heads/master by this push:
     new dabc0ab  Allow setting BlobAccess in LocalBlobStore.putBlob
dabc0ab is described below

commit dabc0ab6a9875f36697ddf1dfdc7c2a5a6241e7f
Author: Andrew Gaul <[email protected]>
AuthorDate: Sun Jan 31 22:27:14 2021 +0900

    Allow setting BlobAccess in LocalBlobStore.putBlob
    
    This addresses a race condition with filesystem users.
---
 .../strategy/internal/FilesystemStorageStrategyImpl.java           | 7 ++++++-
 .../src/main/java/org/jclouds/blobstore/LocalStorageStrategy.java  | 6 +++++-
 .../main/java/org/jclouds/blobstore/TransientStorageStrategy.java  | 7 ++++++-
 .../src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java | 3 +--
 4 files changed, 18 insertions(+), 5 deletions(-)

diff --git 
a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
 
b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
index 90876df..1c438df 100644
--- 
a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
+++ 
b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
@@ -522,6 +522,11 @@ public class FilesystemStorageStrategyImpl implements 
LocalStorageStrategy {
 
    @Override
    public String putBlob(final String containerName, final Blob blob) throws 
IOException {
+      return putBlob(containerName, blob, BlobAccess.PRIVATE);
+   }
+
+   @Override
+   public String putBlob(final String containerName, final Blob blob, 
BlobAccess access) throws IOException {
       String blobKey = blob.getMetadata().getName();
       Payload payload = blob.getPayload();
       filesystemContainerNameValidator.validate(containerName);
@@ -579,7 +584,7 @@ public class FilesystemStorageStrategyImpl implements 
LocalStorageStrategy {
             }
          }
 
-         setBlobAccess(containerName, tmpBlobName, BlobAccess.PRIVATE);
+         setBlobAccess(containerName, tmpBlobName, access);
 
          if (!tmpFile.renameTo(outputFile)) {
             throw new IOException("Could not rename file " + tmpFile + " to " 
+ outputFile);
diff --git 
a/blobstore/src/main/java/org/jclouds/blobstore/LocalStorageStrategy.java 
b/blobstore/src/main/java/org/jclouds/blobstore/LocalStorageStrategy.java
index 1a0ebd8..3a1ef50 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/LocalStorageStrategy.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/LocalStorageStrategy.java
@@ -114,14 +114,18 @@ public interface LocalStorageStrategy {
      */
     Blob getBlob(String containerName, String blobName);
 
+    @Deprecated
+    String putBlob(String containerName, Blob blob) throws IOException;
+
     /**
      * Write a {@link Blob} into a file
      * @param container
      * @param blob
+     * @param access
      * @return etag of blob
      * @throws IOException
      */
-    String putBlob(String containerName, Blob blob) throws IOException;
+    String putBlob(String containerName, Blob blob, BlobAccess access) throws 
IOException;
 
     /**
      * Remove blob named by the given key
diff --git 
a/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java 
b/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java
index 66e1583..9780926 100644
--- 
a/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java
+++ 
b/blobstore/src/main/java/org/jclouds/blobstore/TransientStorageStrategy.java
@@ -165,6 +165,11 @@ public class TransientStorageStrategy implements 
LocalStorageStrategy {
 
    @Override
    public String putBlob(final String containerName, final Blob blob) throws 
IOException {
+      return putBlob(containerName, blob, BlobAccess.PRIVATE);
+   }
+
+   @Override
+   public String putBlob(final String containerName, final Blob blob, 
BlobAccess access) throws IOException {
       byte[] payload;
       HashCode actualHashCode;
       HashingInputStream input = new HashingInputStream(Hashing.md5(), 
blob.getPayload().openStream());
@@ -190,7 +195,7 @@ public class TransientStorageStrategy implements 
LocalStorageStrategy {
       Map<String, Blob> map = containerToBlobs.get(containerName);
       String blobName = newBlob.getMetadata().getName();
       map.put(blobName, newBlob);
-      containerToBlobAccess.get(containerName).put(blobName, 
BlobAccess.PRIVATE);
+      containerToBlobAccess.get(containerName).put(blobName, access);
       return base16().lowerCase().encode(actualHashCode.asBytes());
    }
 
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 20f5fc2..6921827 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
@@ -789,8 +789,7 @@ public final class LocalBlobStore implements BlobStore {
       }
 
       try {
-         String eTag = storageStrategy.putBlob(containerName, blob);
-         setBlobAccess(containerName, blobKey, options.getBlobAccess());
+         String eTag = storageStrategy.putBlob(containerName, blob, 
options.getBlobAccess());
          return eTag;
       } catch (IOException e) {
          String message = e.getMessage();

Reply via email to