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:?]

Reply via email to