Repository: jclouds Updated Branches: refs/heads/master 2efcb2c5a -> 8d87bfc61
Avoid buffering ByteSource when not needed This allows range requests of large files to work. Regression from 79fe91bd035461d9344c03bda276cb12a7a10b1a. Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/8d87bfc6 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/8d87bfc6 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/8d87bfc6 Branch: refs/heads/master Commit: 8d87bfc61bd5190cd0711f6be0189f70741a8c61 Parents: 2efcb2c Author: Andrew Gaul <[email protected]> Authored: Thu Nov 19 14:57:05 2015 -0800 Committer: Andrew Gaul <[email protected]> Committed: Thu Nov 19 15:10:23 2015 -0800 ---------------------------------------------------------------------- .../jclouds/blobstore/config/LocalBlobStore.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/8d87bfc6/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 9c65be7..8d799c6 100644 --- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java +++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java @@ -84,8 +84,6 @@ import org.jclouds.io.ByteStreams2; import org.jclouds.io.ContentMetadata; import org.jclouds.io.ContentMetadataCodec; import org.jclouds.io.Payload; -import org.jclouds.io.payloads.ByteArrayPayload; -import org.jclouds.io.payloads.FilePayload; import org.jclouds.logging.Logger; import org.jclouds.util.Closeables2; @@ -662,17 +660,16 @@ public final class LocalBlobStore implements BlobStore { long size = 0; ImmutableList.Builder<ByteSource> streams = ImmutableList.builder(); - // We must call getRawContent to work around Blob.setPayload calling ByteSourcePayload.release. If the - // Local blobstore returns a ByteArrayPayload or FilePayload it uses a stream, otherwise it uses a - // byte array. + // Try to convert payload to ByteSource, otherwise wrap it. ByteSource byteSource; try { - Object inputStream = blob.getPayload().getRawContent(); - byteSource = (inputStream instanceof ByteArrayPayload || inputStream instanceof FilePayload) ? - (ByteSource) blob.getPayload().getRawContent() - : ByteSource.wrap(ByteStreams2.toByteArrayAndClose(blob.getPayload().openStream())); - } catch (IOException e) { - throw new RuntimeException(e); + byteSource = (ByteSource) blob.getPayload().getRawContent(); + } catch (ClassCastException cce) { + try { + byteSource = ByteSource.wrap(ByteStreams2.toByteArrayAndClose(blob.getPayload().openStream())); + } catch (IOException e) { + throw new RuntimeException(e); + } } for (String s : options.getRanges()) {
