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

Timothy Bish resolved AMQ-5467.
-------------------------------
    Resolution: Fixed

Patched reviewed and applied.  Thanks!

> AMQP transaction may fail to commit, or process unexpected messages, if 
> consumer acks are not in a single unbroken sequential range
> -----------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-5467
>                 URL: https://issues.apache.org/jira/browse/AMQ-5467
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: AMQP
>    Affects Versions: 5.10.0
>            Reporter: Robbie Gemmell
>            Priority: Critical
>             Fix For: 5.11.0
>
>         Attachments: 
> 0001-AMQ-5467-update-AMQP-commit-processing-to-use-indivi.patch
>
>
> When consuming messages in a transaction, the AMQP consumer accepts messages 
> and specifies the transaction they are part of. AMQPProtocolConverter keeps a 
> record of messages accepted in this way. When the transaction is committed, 
> AMQPProtocolConverter assumes that the first and last messages in this 
> 'dispatched in Tx' list form a range, and creates a ranged 'standard ack' 
> MessageAck to cover the messages. The broker then checks that the acks it is 
> processing match messages it has previously dispatched, in 
> PrefetchSubscription#assertAckMatchesDispatched(MessageAck).
> If the messages aren't added to the AMQP transaction in sequence, e.g. the 
> assumed 'last id' is actually for a message dispatched before the assumed 
> 'first id' in the sequence, the check fails even though all the messages 
> being acked are in the dispatched list. There is also an implicit assumption 
> in the processing that the ack range is an unbroken sequence, and as a result 
> it would seem possible for messages to be acked that were not actually 
> considered part of the AMQP transaction. This non-sequential ordering can for 
> example happen because a client isn't releasing unconsumed prefetched 
> messages after a rollback of consumed messages, or alternatively is 
> processing higher priority messages before lower priority messages originally 
> dispatched to it earlier. 
> To combat these issues, the AMQP transaction commit processing should be 
> updated to use 'individual acks'.



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

Reply via email to