hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Kalnichevski <ol...@apache.org>
Subject Re: I/O dispatch worker terminated abnormally
Date Sun, 07 Aug 2011 21:34:54 GMT
On Sun, 2011-08-07 at 14:05 -0400, James Leigh wrote:
> Hi hc,
> 
> We have been developing with httpcore for almost 18 months and have been
> really happy with it. However, as we push to have more public facing Web
> server running httpcore we are concerned about abnormal client
> behaviour.
> 
> In the unusual event that an IOReactor throws an exception how can we
> have the current connection closed without affecting the rest of the
> server?
> 
> This can happen in an SSL connection, when the server does not have the
> algorithm used by the client or the client does not follow the
> specification properly. It can also happen in unencrypted connections
> when something unexplained happens with the buffers, like the stack
> trace below.
> 
> I know that an IOReactorExceptionHandler can be used to distinguish
> between fatal and ignorable exceptions. However, fatal exceptions
> (re-thrown) seem to hang the server and ignored exceptions don't closed
> the connection (so says the javadoc).
> 
> What is the best way to indicate that the TCP connection should be
> closed (not the IOReactor) on unexpected exceptions?
> 

Hi James

Usually protocol handlers are expected to handle all recoverable
exceptions including non-checked (runtime) ones. All events triggered by
the I/O reactor and propagated to the protocol handler take place in a
context of a particular connection, so one can always choose to shut
down the connection if the exception can be recovered from. Those
exceptions that are not handled by the protocol handler or thrown by the
I/O reactor itself usually represent a programming error and therefore
considered non-recoverable (fatal). In those cases the best course of
action would be to let the I/O reactor shut down itself and be
restarted.


> Caused by: java.lang.IllegalArgumentException
>         at java.nio.Buffer.limit(Buffer.java:249)
>         at org.apache.http.impl.nio.codecs.LengthDelimitedDecoder.read(LengthDelimitedDecoder.java:95)

The IllegalArgumentException thrown inside LengthDelimitedDecoder
appears to be a bug in HttpCore, which need to be fixed. I do not think
there is a reasonable way of recovering from such exceptions.

Is there a way to reproduce it? Are you using the latest version of
HttpCore?

Cheers

Oleg  



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


Mime
View raw message