zruchala opened a new pull request, #52:
URL: https://github.com/apache/olingo-odata2/pull/52
Problem:
We experienced OutOfMemory exceptions when sending multiple bigger batch
requests simultaneously. The current implementation of olingo2 requires the use
of byte[] or stream input and also creates intermediate data in memory, which
may be suboptimal in some situations.
The change request allows data to be passed as an input stream:
```java
BatchChangeSetPart changeRequest = BatchChangeSetPart.newBuilder()
.method("POST")
.uri("ServiceRequestCollection")
.headers(headers)
// use batchInputResource as a body (instead of byte[] or
string)
.body(batchInputResource)
.build();
```
And also changes the internal implementation to avoid loading intermadiate
data into memory (if data exceed threshold)
```java
static class BodyBuilder {
...
public InputStream getContentAsStream() {
try {
return fileBuffer != null ?
new DeleteOnCloseFileInputStream(fileBuffer) : new
ByteArrayInputStream(getBufferContent());
} catch (IOException exception) {
throw new ODataRuntimeException(exception);
}
}
```
To sum up, this change allows you to:
- avoid loading payload into memory before passing batch-request to the
olingo2 engine. You may use files or other data sources.
- decrease overall memory consumption, olingo2 uses disk storage internally
if the received data exceed limit.
Changes are backwards compatible.
I am attaching a sample project with a use case:
[olingo-stream.zip](https://github.com/apache/olingo-odata2/files/14978582/olingo-stream.zip)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]