Carter Kozak created HTTPCLIENT-2221:
----------------------------------------
Summary: Differences between HttpEntity.close() and
HttpEntity.getContent().close()
Key: HTTPCLIENT-2221
URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2221
Project: HttpComponents HttpClient
Issue Type: Bug
Components: HttpClient (classic)
Affects Versions: 5.1.3
Reporter: Carter Kozak
My assumption is that closing an entity should have the same behavior as
closing the entity.getContent() inputstream.
Given a streaming response, calling HttpEntity.close doesn't handle connection
management pieces (interactions with the {{ExecRuntime}}) because
{{ResponseEntityProxy}} wraps {{getContent}} and {{writeTo}}, however it does
not override the {{close}} implementation inherited from {{HttpEntityWrapper}}.
In practice, this may mean that calling HttpEntity.close instead of consuming
the contents doesn't return the connection to the pool, or in my case, calling
CloseableHttpResponse.close results in {{execRuntime.disconnectEndpoint();}}
after the entity has been drained within its own close, however the connection
is still closed.
I think we want to make either one of the following changes:
1. HttpEntity.close() provides the same behavior as
HttpEntity.getContent().close(), draining the response (which we already do)
and returning the connection for reuse
2. HttpEntity.close() does not read the full response, closing it immediately.
I think I'd prefer to avoid this approach given that much of our code assumes
close leaves a connection in a reusable state.
Separately, it may be helpful to provide a strategy interface to allow for more
specific handling of connection closure prior to exhaustion of bytes. The
current strategy of draining the full response is ideal in most scenarios,
however after a certain amount of additional data, we may be better off closing
the connection. I suspect part of the issue in this case is that we seem to
expect subtly different behavior between {{CloseableHttpResponse.close}} and
{{EntityUtils.consume(response.getEntity())}}.
--
This message was sent by Atlassian Jira
(v8.20.7#820007)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]