HttpClient infinite HTTP/2 connection pooling

Daniel Fuchs daniel.fuchs at oracle.com
Thu Sep 22 08:38:46 UTC 2022


Hi Anton,

There is a PR under review that will provide a system property
to control the maximum time an HTTP/2 connection can remain idle
before being closed by the client:

Please see https://git.openjdk.org/jdk/pull/10183

best regards,

-- daniel

On 21/09/2022 19:50, Anton Keks wrote:
> Hello!
> 
> While debugging production issues with our payment system integration 
> that frequently gets HttpTimeoutExceptions I stumbled upon the fact that:
> 
> * HTTP/1 connections are pooled using the ConnectionPool class and both 
> pool size and maximum keepalive time can be controlled using system 
> properties
> * HTTP/2 connections are pooled in Http2ClientImpl.connections map, 
> which doesn't have any controls for number of pooled connections or 
> their lifetime.
> 
> Despite the fact that most people assume that ConnectionPool properties 
> also apply for HTTP/2 connections, there is a real possibility for 
> unsolvable problems with HTTP/2 connections that stay in the pool for 
> too long (hours).
> 
> Most HTTP/2 servers send GOAWAY packets after some time (e.g. google.com 
> <http://google.com> after 4 minutes) and the connections get removed 
> from the pool.
> 
> But if the server doesn't send GOAWAY, then the connection can be 
> killed/expire on the network (router) level without ever delivering an 
> RST or anything back. In the case I mentioned above, it happens in 
> reality: somehow the connection doesn't work anymore, but HttpClient 
> still assumes it is working and sends new requests to it without ever 
> hearing back and producing HttpTimeoutException.
> 
> Currently it seems the only non-hacky workaround for this problem is 
> downgrading to HTTP/1 on the HttpClient level.
> 
> So the questions:
> * Why HTTP/2 connection pool cannot be controlled at all?
> * Why HttpTimeoutException still keeps the connection in the pool?
> 
> Thanks for any comments,
> Anton
> //codeborne



More information about the net-dev mailing list