Chris Richardson created QPIDJMS-141:
----------------------------------------

             Summary: Thread sync error can cause long blocking delay after 
message send
                 Key: QPIDJMS-141
                 URL: https://issues.apache.org/jira/browse/QPIDJMS-141
             Project: Qpid JMS
          Issue Type: Bug
          Components: qpid-jms-client
    Affects Versions: 0.6.0
            Reporter: Chris Richardson
             Fix For: 0.7.0


There is a discontinuity in the thread synchronisation between the 
JmsConnection and AmqpProvider classes when sending a message: the 
JmsConnection class awaits a signal after requesting message transmission (line 
615, "request.sync();") while the AmqpProvider does not send the expected 
signal (lines 486/487,
if (couldSend && envelope.isSendAsync()) {
                        request.onSuccess();
)

This results in a ~1000ms blocking delay while the request.sync() times out.

This only happens in a scenario where the JmsSession determines that the 
message should be sent synchronously (lines 668/669: 
boolean sync = connection.isAlwaysSyncSend() ||
                           (!connection.isForceAsyncSend() && deliveryMode == 
DeliveryMode.PERSISTENT && !getTransacted());
).

One workaround for this is to set the MessageProducer deliveryMode to 
DeliveryMode.NON_PERSISTENT, causing the JmsSession to evaluate the send 
operation to be asynchronous and so the AmqpProvider signals the request as 
expected by the JmsConnection. However this may have other side-effects...




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to