On Tue, 2024-03-12 at 21:58 -0400, Jonathan Amir wrote: > Hello, > I am building an HTTP/2 only client for running multiple requests in > parallel. > I understand that there is no connection pool internally, rather > there is > one connection per host. For simplicity, let's say all my requests go > to > the same host. >
This is correct. It is still technically a pool though (per host basis). > I have a situation where under stress there are some errors. It > starts with > socket timeout (several threads in parallel), and after a while there > is a > ConnectionClosedException. Even though HTTP/2 has a proper connection termination handshake, the handshake is potentially racy. Under high load ConnectionClosedException can and will happen. Your application code must be prepared to handle those. > I am not sure what is the flow of events that leads to this, and what > is > the relationship between those errors. I also don't know if it is my > client > or the server that closed the connection. > It, of source, would help greatly to know what exactly happens and leads to ConnectionClosedException. > My initial question is, since there is only one connection maintained > internally, how does one recover from ConnectionClosedException? The > connection life-cycle is opaque to me - there is no pool, and no > eviction > strategy, so no concept of creating a new connection. So what am I > missing? Is > the httpClient object still usable after a ConnectionClosedException? > The internal connection pool can automatically re-establish closed connection once the connection termination handshake completes or the connection gets dropped abnormally. > Somewhat related, I am looking at the sample here: > https://hc.apache.org/httpcomponents-client-5.3.x/migration-guide/migration-to-async-http2.html > What is the difference between the two socket timeout configurations, > on > IOReactorConfig and ConnectionConfig? Both represent the same timeout but apply at different levels. IOReactorConfig apply at the i/o reactor level and are specific to the async i/o model. ConnectionConfig apply at the connection management level and is not specific to any i/o model. > What is the time to live? You mean TTL, total time to live? The maximum period of time connections can be kept alive and re-used. Once past TTL connections get automatically closed out. Hope this helps Oleg --------------------------------------------------------------------- To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org