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

Gary Tully resolved AMQ-2560.
-----------------------------

    Resolution: Fixed

changed merged to 5.3.1 branch at r900390

> Failover reconnect with outstanding consumer transaction can result in 
> javax.jms.JMSException: Unmatched acknowledege: MessageAck and lost ack
> ----------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2560
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2560
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.3.0
>            Reporter: Gary Tully
>            Assignee: Gary Tully
>             Fix For: 5.3.1, 5.4.0
>
>
> It is possible to loose an ack after failover if an outstanding consumer 
> transaction (and ack) is in progress during failover. If due to ordering or 
> timing, an unexpected message is replayed to the consumer on recovery it will 
> delivered (and correctly not suppressed as a duplicate). This will be acked 
> with the outstanding messages but the ack will result in an exception 
> {code}javax.jms.JMSException: Unmatched acknowledege: MessageAck...{code} as 
> the original message will not have been re-dispatched. Essentially the ack is 
> lost at this stage.
> The message will stay dispatched/inflight til the consumer closes, at which 
> point it can again be re-dispatched to another consumer. A broker restart 
> will also see it re-dispatched. In the mean time, it can look orphaned for 
> some time or will be visible in the jdbc store. It will also be visible via 
> the inflight count on that consumer.
> Resolution:
> On a transport disconnect, a consumer should discard acked state along with 
> delivered messages as the messages that are redelivered are not guaranteed to 
> be the same. This was not being done for a transacted session. Replayed 
> messages are more likely to be the same if the order of connection recovery 
> is preserved, but this will not be sufficient. (the test case shows the 
> problem because recovery order is dependent on hashmap order which is random 
> when dealing with connection ids)
> This needs to be done for both consumers that use receive() or message 
> listeners (that are handled through dispatch)

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