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 9c21bf2 JCLOUDS-1367: Do not open open InputStream in copyBlob
9c21bf2 is described below
commit 9c21bf2cc2af3d9f45542285f278d1b85f700f2a
Author: Andrew Gaul <[email protected]>
AuthorDate: Sat Jul 25 16:34:46 2020 +0900
JCLOUDS-1367: Do not open open InputStream in copyBlob
This avoids an unneeded call to ByteStreams2.toByteArrayAndClose in
getBlob for range requests and elides a large memory allocation.
---
.../jclouds/blobstore/config/LocalBlobStore.java | 43 +++++++++++-----------
1 file changed, 21 insertions(+), 22 deletions(-)
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 6877c77..e8d90e0 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
@@ -685,6 +685,7 @@ public final class LocalBlobStore implements BlobStore {
try {
byteSource = (ByteSource) blob.getPayload().getRawContent();
} catch (ClassCastException cce) {
+ // This should not happen; both FilesystemStorageStrategyImpl
and TransientStorageStrategy return ByteSource
try {
byteSource =
ByteSource.wrap(ByteStreams2.toByteArrayAndClose(blob.getPayload().openStream()));
} catch (IOException e) {
@@ -724,18 +725,31 @@ public final class LocalBlobStore implements BlobStore {
"bytes " + offset + "-" + last + "/" +
blob.getPayload().getContentMetadata().getContentLength());
}
ContentMetadata cmd = blob.getPayload().getContentMetadata();
- // return InputStream to more closely follow real blobstore
- try {
-
blob.setPayload(ByteSource.concat(streams.build()).openStream());
- } catch (IOException ioe) {
- throw new RuntimeException(ioe);
- }
+ blob.setPayload(ByteSource.concat(streams.build()));
HttpUtils.copy(cmd, blob.getPayload().getContentMetadata());
blob.getPayload().getContentMetadata().setContentLength(size);
blob.getMetadata().setSize(size);
}
}
checkNotNull(blob.getPayload(), "payload " + blob);
+ // return InputStream to more closely follow real blobstore
+ Payload payload;
+ try {
+ InputStream is = blob.getPayload().openStream();
+ if (is instanceof FileInputStream) {
+ // except for FileInputStream since large MPU can open too many fds
+ is.close();
+ payload = blob.getPayload();
+ } else {
+ blob.resetPayload(/*release=*/ false);
+ payload = new InputStreamPayload(is);
+ }
+ } catch (IOException ioe) {
+ throw new RuntimeException(ioe);
+ }
+ payload.setContentMetadata(blob.getMetadata().getContentMetadata());
+ blob.setPayload(payload);
+ copyPayloadHeadersToBlob(blob.getPayload(), blob);
return blob;
}
@@ -753,22 +767,7 @@ public final class LocalBlobStore implements BlobStore {
private Blob copyBlob(Blob blob) {
Blob returnVal =
blobFactory.create(BlobStoreUtils.copy(blob.getMetadata()));
- // return InputStream to more closely follow real blobstore
- Payload payload;
- try {
- InputStream is = blob.getPayload().openStream();
- if (is instanceof FileInputStream) {
- // except for FileInputStream since large MPU can open too many fds
- is.close();
- payload = blob.getPayload();
- } else {
- payload = new InputStreamPayload(blob.getPayload().openStream());
- }
- } catch (IOException ioe) {
- throw new RuntimeException(ioe);
- }
- payload.setContentMetadata(blob.getMetadata().getContentMetadata());
- returnVal.setPayload(payload);
+ returnVal.setPayload(blob.getPayload());
copyPayloadHeadersToBlob(blob.getPayload(), returnVal);
return returnVal;
}