synapse-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andreas Veithen (JIRA)" <>
Subject [jira] Updated: (SYNAPSE-527) Transports use TRANSPORT_NON_BLOCKING in an incorrect way
Date Sun, 10 May 2009 22:02:45 GMT


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:
>             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

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:
For additional commands, e-mail:

View raw message