Stomp does not retransmit message if client ACKs inside disconnected transaction
--------------------------------------------------------------------------------

                 Key: AMQ-2243
                 URL: https://issues.apache.org/activemq/browse/AMQ-2243
             Project: ActiveMQ
          Issue Type: Bug
          Components: Transport
    Affects Versions: 5.2.0
            Reporter: Ashley Holman


Demonstration of problem:

MyQueue contains MSG1, MSG2.

Stomp:
- CONNECT
- SUBSCRIBE MyQueue (ack = client)
- BEGIN tx1
- <reads a message coming from MyQueue> message-id: MSG1
- ACK message-id: MSG1 
- *disconnect TCP session*

Upon reconnecting and subscribing, MSG2 is received.  MSG1 still appears in the 
queue under the admin web interface but does not get retransmitted (is it still 
being locked by the now-dead transaction?)
If the above example finished with an ABORT tx1 before disconnecting, the 
problem does not occur.

Further to this, if I restart activemq, MSG1 will now get retransmitted 
correctly (ie. it is no longer locked by the transaction).

I suspect that the stomp implementation does not roll back all open 
transactions when the client unexpectedly disconnects.

I have attached a telnet session demonstrating the exact problem.

I've also attached a unit test for transport/stomp/ which contains two tests:
* testDisconnectRetransmit() - tests that an unacknowledged message is 
re-transmitted if the client disconnects before ACKing it - SUCCEEDS
* testTransactionDisconnectRetransmit() - same as above except the message gets 
ACK'd inside an incomplete transaction before disconnecting - FAILS

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to