You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by "Andreas Veithen (JIRA)" <ji...@apache.org> on 2009/05/11 00:02:45 UTC

[jira] Updated: (SYNAPSE-527) Transports use TRANSPORT_NON_BLOCKING in an incorrect way

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

Andreas Veithen updated SYNAPSE-527:
------------------------------------

         Priority: Critical  (was: Minor)
    Fix Version/s: 1.3

Increasing the priority to critical because this issue may cause data loss and crash Synapse.

This happens in the following scenario:
- Modify sample 250 to forward using JMS instead of HTTP.
- Preload the queue of the proxy service with a large number of messages: ant jmsclient -Djms_type=pox -Djms_dest=dynamicQueues/StockQuoteProxy -Djms_payload=MSFT -Djms_msgcount=10000
- Start Synapse

On Mac OS X, the result is that Synapse will successfully process a certain number of messages (of order 1000), but then starts to trigger errors "Can't create thread: 5" and later fails with an out of memory error. The result is that messages are lost.

The workaround is to add the following mediator to the inSequence:

<property action="remove" name="transportNonBlocking" scope="axis2"/>

In that case, Synapse will gently forward all the messages.

> Transports use TRANSPORT_NON_BLOCKING in an incorrect way
> ---------------------------------------------------------
>
>                 Key: SYNAPSE-527
>                 URL: https://issues.apache.org/jira/browse/SYNAPSE-527
>             Project: Synapse
>          Issue Type: Bug
>          Components: Transports
>    Affects Versions: 1.2
>            Reporter: Andreas Veithen
>            Priority: Critical
>             Fix For: 1.3
>
>
> The TRANSPORT_NON_BLOCKING property is set on the message contexts for incoming messages by ServerWorker#createMessageContext (NIO HTTP transport) and AbstractTransportListener#createMessageContext. When the message is sent out, Synapse copies this property over to the message context for the outgoing message. This in turn has an impact on the threading behavior when the message is sent: depending on the value of TRANSPORT_NON_BLOCKING, the <send> mediator (more precisely the OperationClient) will invoke the outgoing transport in a separate thread. It is not clear why the transport that handles the incoming request should determine the threading behavior of the transport that sends the outgoing request to the target service.
> See also http://markmail.org/message/6iuslkueny24po73

-- 
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@synapse.apache.org
For additional commands, e-mail: dev-help@synapse.apache.org