[ https://issues.apache.org/jira/browse/HTTPCLIENT-2316?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Stephan Windmüller updated HTTPCLIENT-2316: ------------------------------------------- Attachment: log-output.txt > ConnectionShutdownException when connection is closed for 401 response > ---------------------------------------------------------------------- > > Key: HTTPCLIENT-2316 > URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2316 > Project: HttpComponents HttpClient > Issue Type: Bug > Components: HttpClient (classic) > Affects Versions: 5.3.1 > Environment: Ubuntu Linux, Java 17.0.10, connecting to an Apache Web > Server > Reporter: Stephan Windmüller > Priority: Major > Attachments: log-output.txt > > > When a connection is used for multiple requests, the {{Keep-Alive}} header > has a {{max}} value that is reduced until it reaches 0, resulting in a > {{Connection: closed}} header. If that happens while a 401 response is > handled, the following code is executed: > {code:java} > org.apache.hc.client5.http.impl.classic.InternalExecRuntime.markConnectionNonReusable(InternalExecRuntime.java:233) > at > org.apache.hc.client5.http.impl.classic.MainClientExec.execute(MainClientExec.java:142) > at > org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) > at > org.apache.hc.client5.http.impl.classic.ConnectExec.execute(ConnectExec.java:188) > at > org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) > at > org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(ProtocolExec.java:192) > at > org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) > at > org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec.execute(HttpRequestRetryExec.java:113) > at > org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) > at > org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute(ContentCompressionExec.java:152) > at > org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) > at > org.apache.hc.client5.http.impl.classic.RedirectExec.execute(RedirectExec.java:116) > at > org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) > at > org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:170) > at > org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:87) > at > org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:55) > at > org.apache.hc.client5.http.classic.HttpClient.executeOpen(HttpClient.java:183) > at > org.apache.hc.client5.http.fluent.Request.internalExecute(Request.java:201) > at org.apache.hc.client5.http.fluent.Executor.execute(Executor.java:244) > {code} > After that, > {{org.apache.hc.client5.http.impl.classic.InternalExecRuntime#disconnectEndpoint}} > is called. Any further attempt to use that connection results in this > stacktrace: > {code:java} > org.apache.hc.client5.http.impl.ConnectionShutdownException > at > org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager$InternalConnectionEndpoint.getConnection(BasicHttpClientConnectionManager.java:502) > at > org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager$InternalConnectionEndpoint.isConnected(BasicHttpClientConnectionManager.java:519) > at > org.apache.hc.client5.http.impl.classic.InternalExecRuntime.isEndpointConnected(InternalExecRuntime.java:149) > at > org.apache.hc.client5.http.impl.classic.ConnectExec.execute(ConnectExec.java:128) > at > org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) > at > org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(ProtocolExec.java:192) > at > org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) > at > org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec.execute(HttpRequestRetryExec.java:113) > at > org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) > at > org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute(ContentCompressionExec.java:152) > at > org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) > at > org.apache.hc.client5.http.impl.classic.RedirectExec.execute(RedirectExec.java:116) > at > org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51) > at > org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:170) > at > org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:87) > at > org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:55) > at > org.apache.hc.client5.http.classic.HttpClient.executeOpen(HttpClient.java:183) > at > org.apache.hc.client5.http.fluent.Request.internalExecute(Request.java:201) > at org.apache.hc.client5.http.fluent.Executor.execute(Executor.java:244) > {code} > The behaviour sounds a bit like HTTPASYNC-63. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org