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 2014/05/28 00:53:23 UTC

git commit: Use HashingInputStream to avoid buffering Payload

Repository: jclouds
Updated Branches:
  refs/heads/master 2e942072d -> 0d2c7ed6f


Use HashingInputStream to avoid buffering Payload


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

Branch: refs/heads/master
Commit: 0d2c7ed6ff3221f3740439b6cfccbdaa2958e604
Parents: 2e94207
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon May 26 20:45:01 2014 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue May 27 15:53:06 2014 -0700

----------------------------------------------------------------------
 .../internal/FilesystemStorageStrategyImpl.java  | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/0d2c7ed6/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
----------------------------------------------------------------------
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 7f3c376..79bf48f 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
@@ -39,7 +39,6 @@ import org.jclouds.filesystem.predicates.validators.FilesystemContainerNameValid
 import org.jclouds.filesystem.reference.FilesystemConstants;
 import org.jclouds.filesystem.util.Utils;
 import org.jclouds.io.Payload;
-import org.jclouds.io.Payloads;
 import org.jclouds.logging.Logger;
 import org.jclouds.rest.annotations.ParamValidators;
 
@@ -48,7 +47,9 @@ import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Sets;
-import com.google.common.io.ByteStreams;
+import com.google.common.hash.Hashing;
+import com.google.common.hash.HashingInputStream;
+import com.google.common.io.Closeables;
 import com.google.common.io.Files;
 
 /**
@@ -196,17 +197,12 @@ public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
       filesystemContainerNameValidator.validate(containerName);
       filesystemBlobKeyValidator.validate(blobKey);
       File outputFile = getFileForBlobKey(containerName, blobKey);
+      HashingInputStream his = null;
       try {
          Files.createParentDirs(outputFile);
-         if (payload.getRawContent() instanceof File)
-            Files.copy((File) payload.getRawContent(), outputFile);
-         else {
-            if (!payload.isRepeatable()) {
-               payload = Payloads.newPayload(ByteStreams.toByteArray(payload));
-            }
-            Files.copy(payload, outputFile);
-         }
-         Payloads.calculateMD5(payload);
+         his = new HashingInputStream(Hashing.md5(), payload.openStream());
+         Files.asByteSink(outputFile).writeFrom(his);
+         payload.getContentMetadata().setContentMD5(his.hash().asBytes());
          String eTag = base16().lowerCase().encode(payload.getContentMetadata().getContentMD5());
          return eTag;
       } catch (IOException ex) {
@@ -217,6 +213,7 @@ public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
          }
          throw ex;
       } finally {
+         Closeables.closeQuietly(his);
          payload.release();
       }
    }