[java.net.http.HttpClient] Error on idle/closed stream when sending requests

Jaikiran Pai jai.forums2013 at gmail.com
Thu Jul 20 06:11:46 UTC 2023


Hello Nicolas,

This looks like it will need to be investigated. I've opened 
https://bugs.openjdk.org/browse/JDK-8312433 to tracking this. It would 
help further if you could attach the complete exception logs along with 
timestamps, if any.

Is this consistently reproducible? Perhaps you could launch your 
application passing it the -Djdk.internal.httpclient.debug=true system 
property? That will generate very verbose logs, so you might want to use 
that sparingly and remove that system property when you have collected 
the logs for this issue.

-Jaikiran

On 20/07/23 11:00 am, Nicolas Henneaux wrote:
> Hi all,
>
> Since I updated Java from 19.0.2 to 20.0.1, I got some errors with 
> connection idle shutdown or closed stream usage when trying to send 
> HTTP requests with java.net.http.HttpClient.
>
> The two following errors are happening. I suspect those are linked 
> even if they don't trigger together.
> 1. java.net.http.HttpConnectTimeoutException: HTTP connection idle, no 
> active streams. Shutting down.
> at jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:890) 
> ~[java.net.http:?]
> 2. java.io.IOException: Stream 9 cancelled
> at jdk.internal.net.http.Stream.cancel(Stream.java:1229) 
> ~[java.net.http:?]
> The detailed stacks are copied below.
>
> Error 1. is caused by an idle connection trying to be used to send the 
> request from what I understood from the code. Error 2. despite saying 
> it is a cancelled streamed is actually happening when the stream is 
> closed if I haven't missed something in the code.
> I suspect either the idle connections are not always properly 
> discarded to create a new one or there is a race condition when 
> discarding the idle connections.
>
> I was not able so far to find where this could happen and I hope you 
> could help me to find where the problem lies.
>
> Thank you in advance for your help,
>
> Best regards,
>
> Nicolas Henneaux
>
> Detailed stacks
> 1. Caused by: java.net.http.HttpConnectTimeoutException: HTTP 
> connection idle, no active streams. Shutting down.
> at jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:890) 
> ~[java.net.http:?]
> at 
> jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:133) 
> ~[java.net.http:?]
> (...)
> Caused by: java.net.http.HttpConnectTimeoutException: HTTP connection 
> idle, no active streams. Shutting down.
> at 
> jdk.internal.net.http.Http2Connection$IdleConnectionTimeoutEvent.handle(Http2Connection.java:204) 
> ~[java.net.http:?]
> at 
> jdk.internal.net.http.HttpClientImpl.purgeTimeoutsAndReturnNextDeadline(HttpClientImpl.java:1689) 
> ~[java.net.http:?]
> at 
> jdk.internal.net.http.HttpClientImpl$SelectorManager.run(HttpClientImpl.java:1299) 
> ~[java.net.http:?]
>
>
> 2. Caused by: java.io.IOException: Stream 9 cancelled
> at jdk.internal.net.http.Stream.cancel(Stream.java:1229) 
> ~[java.net.http:?]
> at 
> jdk.internal.net.http.Http2Connection.putStream(Http2Connection.java:1237) 
> ~[java.net.http:?]
> at jdk.internal.net.http.Stream.registerStream(Stream.java:851) 
> ~[java.net.http:?]
> at 
> jdk.internal.net.http.Http2Connection.registerNewStream(Http2Connection.java:1337) 
> ~[java.net.http:?]
> at 
> jdk.internal.net.http.Http2Connection.sendFrame(Http2Connection.java:1361) 
> ~[java.net.http:?]
> at jdk.internal.net.http.Stream.sendHeadersAsync(Stream.java:823) 
> ~[java.net.http:?]
> at 
> jdk.internal.net.http.Exchange.lambda$responseAsyncImpl0$8(Exchange.java:550) 
> ~[java.net.http:?]
> at jdk.internal.net.http.Exchange.checkFor407(Exchange.java:430) 
> ~[java.net.http:?]
> at 
> jdk.internal.net.http.Exchange.lambda$responseAsyncImpl0$9(Exchange.java:554) 
> ~[java.net.http:?]
> at 
> java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934) 
> ~[?:?]
> at 
> java.util.concurrent.CompletableFuture.uniHandleStage(CompletableFuture.java:950) 
> ~[?:?]
> at 
> java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:2372) 
> ~[?:?]
> at 
> jdk.internal.net.http.Exchange.responseAsyncImpl0(Exchange.java:554) 
> ~[java.net.http:?]
> at jdk.internal.net.http.Exchange.responseAsyncImpl(Exchange.java:406) 
> ~[java.net.http:?]
> at jdk.internal.net.http.Exchange.responseAsync(Exchange.java:398) 
> ~[java.net.http:?]
> at 
> jdk.internal.net.http.MultiExchange.responseAsyncImpl(MultiExchange.java:409) 
> ~[java.net.http:?]
> at 
> jdk.internal.net.http.MultiExchange.lambda$responseAsync0$2(MultiExchange.java:342) 
> ~[java.net.http:?]
> at 
> java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1150) 
> ~[?:?]
> at 
> java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) 
> ~[?:?]
> at 
> java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773) 
> ~[?:?]
> at 
> jdk.internal.net.http.HttpClientImpl$DelegatingExecutor.execute(HttpClientImpl.java:177) 
> ~[java.net.http:?]
> at 
> java.util.concurrent.CompletableFuture.completeAsync(CompletableFuture.java:2719) 
> ~[?:?]
> at 
> jdk.internal.net.http.MultiExchange.responseAsync(MultiExchange.java:295) 
> ~[java.net.http:?]
> at 
> jdk.internal.net.http.HttpClientImpl.sendAsync(HttpClientImpl.java:983) 
> ~[java.net.http:?]
> at jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:875) 
> ~[java.net.http:?]
> at 
> jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:133) 
> ~[java.net.http:?]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/net-dev/attachments/20230720/9c92336f/attachment.htm>


More information about the net-dev mailing list