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


Reply via email to