You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Robbie Gemmell (JIRA)" <ji...@apache.org> on 2014/12/01 19:32:13 UTC
[jira] [Created] (AMQ-5467) AMQP transaction may fail to commit, or
process unexpected messages, if consumer acks are not in a single unbroken
sequential range
Robbie Gemmell created AMQ-5467:
-----------------------------------
Summary: 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
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)