hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Archie Cobbs (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HTTPCLIENT-731) Interrupting a connecting HTTP request thread incorrectly becomes a timeout exception
Date Thu, 24 Jan 2008 18:48:38 GMT

    [ https://issues.apache.org/jira/browse/HTTPCLIENT-731?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12562165#action_12562165
] 

Archie Cobbs commented on HTTPCLIENT-731:
-----------------------------------------

Actually on looking at this further, I don't think HttpMethodBase.abort() will do anything
while the TCP connection is still being established (please correct me if I'm wrong).

So include in this request making the functioning and semantics of the abort() method "airtight".
That is, abort() is never ignored (unless the method is already completed) and causes the
request to truly abort as soon as possible.; throwing IOException as a result of abort()ing
is fine.


> Interrupting a connecting  HTTP request thread incorrectly becomes a timeout exception
> --------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-731
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-731
>             Project: HttpComponents HttpClient
>          Issue Type: Improvement
>          Components: HttpClient
>    Affects Versions: 3.1 Final
>         Environment: Java 1.5 Linux
>            Reporter: Archie Cobbs
>
> Consider this logic in {{TimeoutController.java}}:
> {noformat}
>     public static void execute(Thread task, long timeout) throws TimeoutException {
>         task.start();
>         try {
>             task.join(timeout);
>         } catch (InterruptedException e) {
>             /* if somebody interrupts us he knows what he is doing */
>         }
>         if (task.isAlive()) {
>             task.interrupt();
>             throw new TimeoutException();
>         }
>     }
> {noformat}
> The effect of this is that if thread A is in the middle of performing an HTTP request
and happens to be waiting for the socket to connect, and then thread B interrupts thread A,
thread A will throw a {{TimeoutException}}, even if the actual timeout is far off in the future.
> In other words, interrupting a requesting thread that happens to be waiting for a socket
to connect is incorrectly interpreted as a connection timeout, which is incorrect.
> In my application, this causes the client to incorrectly believe the server is down,
when in actuality some other part of the client is simply trying to cancel an outstanding
RPC request.
> I realize that invoking {{HttpMethodBase.abort()}} would be a better way to abort the
RPC request and am working on refactoring my code to do that.
> However, this "translation" of a thread interruption into a timeout event is still incorrect.
Furthermore, this behavior is undocumented AFAICT.
> Suggestion for improvement: Convert thread interruptions into the equivalent of {{abort()}}
and document this behavior.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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


Mime
View raw message