Jean-Louis Monteiro created AMQ-9822:
----------------------------------------
Summary: Bad poison acking for transaction message delivery during
failover
Key: AMQ-9822
URL: https://issues.apache.org/jira/browse/AMQ-9822
Project: ActiveMQ
Issue Type: Bug
Reporter: Jean-Louis Monteiro
The following test is randomly failing
FailoverDurableSubTransactionTest.testFailoverCommitListener:352 DLQ empty
expected:<0> but was:<10>
The test fails because 10 messages unexpectedly end up in the Dead Letter Queue
(DLQ).
I looked at the test and I have an hypothesis ...
1/ the test intentionally breaks the connection during commit (see plugin)
2/ before the commit breaks, the consumer has already received 10 messages as
part of the transaction, but transaction is not yet committed at this moment
3/ the transport reconnects, the broker correctly redelivers the 10 uncommitted
messages
4/ client thinks they are duplicates and sends an ack to the broker to indicate
the messages are problematic and should go to DLQ
It's a client side issue rather than a test issue. The messages previously
received as part of the transaction that is never committed should probably not
be treated as duplicated when the broker redelivers them after reconnecting.
I tried looking at the following message in the logs when the test fails
{quote}2025-12-17 01:22:46,438 [ Session Task-1] - WARN ActiveMQMessageConsumer
- ID:runnervm6qbrg-43909-1765934560760-30:2:1:1 suppressing duplicate delivery
on connection, poison acking: MessageDispatch \{commandId = 0, responseRequired
= false, consumerId = ID:runnervm6qbrg-43909-1765934560760-30:2:1:1,
destination = topic://Failover.WithTx, message = ActiveMQTextMessage {commandId
= 15, responseRequired = true, messageId =
ID:runnervm6qbrg-43909-1765934560760-32:1:1:1:12, originalDestination = null,
originalTransactionId = null, producerId =
ID:runnervm6qbrg-43909-1765934560760-32:1:1:1, destination =
topic://Failover.WithTx, transactionId = null, deliveryTime = 0, expiration =
0, timestamp = 1765934566409, arrival = 0, brokerInTime = 1765934566409,
brokerOutTime = 1765934566433, correlationId = null, replyTo = null, persistent
= true, type = null, priority = 4, groupID = null, groupSequence = 0,
targetConsumerId = null, compressed = false, userID = null, content =
org.apache.activemq.util.ByteSequence@39112b96, marshalledProperties =
org.apache.activemq.util.ByteSequence@2c85f629, dataStructure = null,
redeliveryCounter = 1, size = 0, properties = {ID=11}, readOnlyProperties =
true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer =
false, text = Test message}, redeliveryCounter = 1}
{quote}
The previouslyDeliveredMessages (in ActiveMQMessageConsumer) might not
correctly be populated in all failover scenarios, especially asynchronous
dispatch.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact