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

Rob Davies resolved AMQ-1226.
-----------------------------

    Resolution: Fixed

This behaviour has been fixed in 5.2 - we don't patch old versions - as we 
don't maintain branches

> 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.0.2, 4.1.0, 4.1.1
>         Environment: Linux (Suse 9.3 and Gentoo), WinXP, JDK 1.5.0
>            Reporter: Dustin Vain
>             Fix For: 5.2.0
>
>         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