[ 
https://issues.apache.org/jira/browse/OLINGO-1468?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jonathan Jarvis updated OLINGO-1468:
------------------------------------
    Description: 
When using the OData v4 Client to perform Batch requests with chunked transfer 
encoding disabled, obtaining the payloadManager() BatchManager causes a block 
that waits the thread indefinitely on a PipedInputStream.
{code:java}
ODataClient client = ...
client.getOdataClient().getConfiguration().setUseChuncked( false );
ODataBatchRequest br = client.getBatchRequestFactory().getBatchRequest( 
<baseUrl> );

//Thread waits indefinitely here, and the BatchManager is required to 
addRequest to the Batch
BatchManager bm = br.payloadManager();
{code}
The code locks on this IOUtils call because the *input* argument is a 
*PipedInputStream*:

[https://github.com/apache/olingo-odata4/blob/4.7.1-RC01/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java#L289]

called from by:

[https://github.com/apache/olingo-odata4/blob/4.7.1-RC01/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedRequest.java#L117]

I believe the problem could be fixed if chunking disabled would cause the 
_URIUtils.shouldUseRepeatableHttpBodyEntry_ function to return *true*, thus the 
IOUtils.copy would not be executed until the Future of 
AbstractODataStreamedRequest is satisfied.

[https://github.com/apache/olingo-odata4/blob/4.7.1-RC01/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java#L267]

 

 

  was:
When using the OData v4 Client to perform requests against a Microsoft Dynamics 
Instance (which does not support chunked transfer encoding), attempting to 
create a BatchManager causes a block that waits the thread indefinitely on a 
PipedInputStream.

{code:java}
ODataClient client = ...
client.getOdataClient().getConfiguration().setUseChuncked( false );
ODataBatchRequest br = client.getBatchRequestFactory().getBatchRequest( 
<baseUrl> );

//Thread waits indefinitely here, and the BatchManager is required to 
addRequest to the Batch
BatchManager bm = br.payloadManager();
{code}

The code locks on this IOUtils call because the *input* argument is a 
*PipedInputStream*:

https://github.com/apache/olingo-odata4/blob/4.7.1-RC01/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java#L289

called from by:

https://github.com/apache/olingo-odata4/blob/4.7.1-RC01/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedRequest.java#L117

I believe the problem could be fixed if chunking disabled would cause the 
_URIUtils.shouldUseRepeatableHttpBodyEntry_ function to return *true*, thus the 
IOUtils.copy would not be executed until the Future of 
AbstractODataStreamedRequest is satisfied.

https://github.com/apache/olingo-odata4/blob/4.7.1-RC01/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java#L267



 

 


> Batch Requests Block Indefinitely on Batch Request payloadManager() access 
> when chunking disabled
> -------------------------------------------------------------------------------------------------
>
>                 Key: OLINGO-1468
>                 URL: https://issues.apache.org/jira/browse/OLINGO-1468
>             Project: Olingo
>          Issue Type: Bug
>          Components: odata4-client
>    Affects Versions: (Java) V4 4.7.1
>            Reporter: Jonathan Jarvis
>            Priority: Major
>
> When using the OData v4 Client to perform Batch requests with chunked 
> transfer encoding disabled, obtaining the payloadManager() BatchManager 
> causes a block that waits the thread indefinitely on a PipedInputStream.
> {code:java}
> ODataClient client = ...
> client.getOdataClient().getConfiguration().setUseChuncked( false );
> ODataBatchRequest br = client.getBatchRequestFactory().getBatchRequest( 
> <baseUrl> );
> //Thread waits indefinitely here, and the BatchManager is required to 
> addRequest to the Batch
> BatchManager bm = br.payloadManager();
> {code}
> The code locks on this IOUtils call because the *input* argument is a 
> *PipedInputStream*:
> [https://github.com/apache/olingo-odata4/blob/4.7.1-RC01/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java#L289]
> called from by:
> [https://github.com/apache/olingo-odata4/blob/4.7.1-RC01/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedRequest.java#L117]
> I believe the problem could be fixed if chunking disabled would cause the 
> _URIUtils.shouldUseRepeatableHttpBodyEntry_ function to return *true*, thus 
> the IOUtils.copy would not be executed until the Future of 
> AbstractODataStreamedRequest is satisfied.
> [https://github.com/apache/olingo-odata4/blob/4.7.1-RC01/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java#L267]
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to