[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