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 <[email protected]> Authored: Mon May 26 20:45:01 2014 -0700 Committer: Andrew Gaul <[email protected]> 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(); } }
