[ 
https://issues.apache.org/jira/browse/SYNAPSE-205?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andreas Veithen updated SYNAPSE-205:
------------------------------------

    Attachment: synapse-205-with-cancel.patch.txt

After setting up an appropriate fault sequence in my synapse.xml, the timeout 
fault is correctly reported back to the client. However, after this Synapse 
starts looping on the following error:

2008-01-13 13:24:39,248 [-] [HttpCoreNIOSender] ERROR HttpCoreNIOSender Unable 
to report back failure to the message receiver
org.apache.axis2.AxisFault: A message was added that is not valid. However, the 
operation context was complete.
        at 
org.apache.axis2.description.TwoChannelAxisOperation.addFaultMessageContext(TwoChannelAxisOperation.java:102)
        at 
org.apache.axis2.util.MessageContextBuilder.createFaultMessageContext(MessageContextBuilder.java:260)
        at 
org.apache.synapse.transport.nhttp.HttpCoreNIOSender$3.handleError(HttpCoreNIOSender.java:468)
        at 
org.apache.synapse.transport.nhttp.HttpCoreNIOSender$3.timeout(HttpCoreNIOSender.java:439)
        at 
org.apache.http.impl.nio.reactor.SessionRequestImpl.timeout(SessionRequestImpl.java:151)
        at 
org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor.processTimeouts(DefaultConnectingIOReactor.java:152)
        at 
org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor.processEvents(DefaultConnectingIOReactor.java:96)
        at 
org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:158)
        at 
org.apache.synapse.transport.nhttp.HttpCoreNIOSender.executeClientEngine(HttpCoreNIOSender.java:139)
        at 
org.apache.synapse.transport.nhttp.HttpCoreNIOSender.access$000(HttpCoreNIOSender.java:68)
        at 
org.apache.synapse.transport.nhttp.HttpCoreNIOSender$1.run(HttpCoreNIOSender.java:101)
        at java.lang.Thread.run(Thread.java:613)

This message is shown every second. After looking at the code in httpcore, it 
seems that a timeout actually doesn't cancel the connection request. I was able 
to work around this problem by adding a call to SessionRequest#cancel in the 
timeout method of the SessionRequestCallback implementation in 
HttpCoreNIOSender.

I attached a new version of the patch that solves the problem for me.

@Oleg: Can you comment on the timeout-cancel issue?
@Asankha: I would definitely like to see this issue solved in 1.1.1 (remember 
that when the NPE occurs, Synapse stops working correctly!). Do you think this 
is possible?

> NPE in HttpCoreNIOSender and "I/O reactor has been shut down"
> -------------------------------------------------------------
>
>                 Key: SYNAPSE-205
>                 URL: https://issues.apache.org/jira/browse/SYNAPSE-205
>             Project: Synapse
>          Issue Type: Bug
>          Components: Transports
>    Affects Versions: NIGHTLY
>            Reporter: Andreas Veithen
>            Priority: Critical
>             Fix For: 1.2
>
>         Attachments: synapse-205-with-cancel.patch.txt, synapse-205.patch.txt
>
>
> When the target service is not available, a request to the proxy service 
> causes the following exception:
> Exception in thread "HttpCoreNIOSender" java.lang.NullPointerException
>       at 
> org.apache.synapse.transport.nhttp.HttpCoreNIOSender$3.handleError(HttpCoreNIOSender.java:460)
>       at 
> org.apache.synapse.transport.nhttp.HttpCoreNIOSender$3.timeout(HttpCoreNIOSender.java:439)
>       at 
> org.apache.http.impl.nio.reactor.SessionRequestImpl.timeout(SessionRequestImpl.java:151)
>       at 
> org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor.processTimeouts(DefaultConnectingIOReactor.java:152)
>       at 
> org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor.processEvents(DefaultConnectingIOReactor.java:96)
>       at 
> org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:158)
>       at 
> org.apache.synapse.transport.nhttp.HttpCoreNIOSender.executeClientEngine(HttpCoreNIOSender.java:139)
>       at 
> org.apache.synapse.transport.nhttp.HttpCoreNIOSender.access$000(HttpCoreNIOSender.java:68)
>       at 
> org.apache.synapse.transport.nhttp.HttpCoreNIOSender$1.run(HttpCoreNIOSender.java:101)
>       at java.lang.Thread.run(Thread.java:613)
> Any further request then fails with "java.lang.IllegalStateException: I/O 
> reactor has been shut down".
> The instruction in HttpCoreNIOSender that causes the NPE is as follows:
> MessageContext nioFaultMessageContext =
>     MessageContextBuilder.createFaultMessageContext(
>         mc, new AxisFault(exception.toString(), exception));
> Probably, when handleError is called by the timeout (rather than the failed) 
> method, as is the case here (see stacktrace), exception is null. The 
> handleError method doesn't handle this situation appropriately.
> Note that this issue is similar but not identical to the one described in 
> SYNAPSE-168.

-- 
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to