hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Oleg Kalnichevski (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HTTPCORE-253) getMetrics() does not work for HEAD or other early release methods
Date Wed, 13 Apr 2011 12:04:05 GMT

    [ https://issues.apache.org/jira/browse/HTTPCORE-253?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13019293#comment-13019293

Oleg Kalnichevski commented on HTTPCORE-253:

> In which case, maybe we should consider moving the metrics to the request, rather than
the connection?

Connection metrics were intended primarily for custom connection keep-alive strategies so
one could choose to close a connection after a certain number of messages or bytes of data
transferred over that connection.

Actually I do not think there is anything in HttpCore that needs fixing as far as the connection
metrics are concerned. We just need to think how to maintain counts of message / bytes transferred
on the HttpClient level given that connections can be released to the pool early. One possibility
I was thinking about was to make managed connections (AbstractClientConnAdaptor and its super
classes) retain a deep copy of HttpConnectionMetrics after releasing the underlying connection
back to the manager. This would enable the users to read the metrics off the connection object
obtained from the local execution context.

Anyway, feel free to propose a solution that makes most sense from your perspective and with
your JMeter hat on.


> getMetrics() does not work for HEAD or other early release methods
> ------------------------------------------------------------------
>                 Key: HTTPCORE-253
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-253
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>            Reporter: Sebb
>             Fix For: 4.2
> The following code works fine for GET:
>            HttpResponse httpResponse =
> httpClient.execute(httpRequest, localContext);
>            HttpConnection conn = (HttpConnection)
> localContext.getAttribute(ExecutionContext.HTTP_CONNECTION);
>            HttpConnectionMetrics metrics = conn.getMetrics();
> but fails on the getMetrics() call when the request is HEAD:
>        org.apache.http.impl.conn.ConnectionShutdownException
>        at org.apache.http.impl.conn.AbstractClientConnAdapter.assertValid(AbstractClientConnAdapter.java:154)
>        at org.apache.http.impl.conn.AbstractClientConnAdapter.getMetrics(AbstractClientConnAdapter.java:190)
> This is because the getMetrics() method calls assertValid() which checks that the connection
has not been released, and the HEAD request is released as soon as it completes, before returning
to the caller.
> Possible solutions:
> - don't call assertValid() in getMetrics()
> - store a pointer to the metrics in the local context

This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org

View raw message