durable topic messages received in reverse order after consumer restart
-----------------------------------------------------------------------

                 Key: AMQ-1226
                 URL: https://issues.apache.org/activemq/browse/AMQ-1226
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 4.1.0, 4.0.2, 4.1.1
         Environment: Linux (Suse 9.3 and Gentoo), WinXP, JDK 1.5.0
            Reporter: Dustin Vain
         Attachments: patchfile.txt

Setup:
1 Publisher (single thread)
1 Subscriber
1 DurableTopic
1 Broker (Default configuration)

Steps to reproduce:
1) Publisher sends MapMessages that include a message number (1, 2, 3, ...)

2) Subscriber receives messages and makes sure the message numbers are in order

3) Stop the subscriber and let some messages accumulate on the broker.  Let's 
assume the last message received was number 11.

4) Restart the subscriber.

5) First several messages can be in reverse order.  I.E.  16, 15, 14, 13, 12

6) Then messages start coming in order.  I.E.   17, 18, 19, ...

Cause:
org.apache.activemq.broker.region.DurableTopicSubscription.deactivate()
When the consumer stops, the deactivate method moves messages that have been 
dispatched but not acknowledged from the "dispatched" LinkedList to the 
"pending"  PendingMessageCursor (which is backed by a LinkedList).  These 
messages must be placed at the beginning of the "pending" list because the 
dispatched messages are chronologically before the pending messages already in 
the list.  The deactivate method iterates over the "dispatched" list and adds 
each message to the beginning of the "pending" list one at a time.  This 
reverses the order of the messages.

If the messages in question get written to JDBC, the problem can be hidden 
because the messages get queried in the correct order.

If the prefetch size is set to 1 the problem does not present because there 
will only be 1 message in the "dispatched" list.

Solution:
In the deactivate method, iterate the "dispatched" list in reverse order.

Patch against 4.1.1 attached.


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