You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by An...@attensity.com on 2010/07/05 09:47:11 UTC

Pure Master/Slave Bug? Expired messages not replicated to Slave

Hi,

I use a Pure Master/Slave configuration with ActiveMQ 5.3.2.
Master/Slave both use the same DLQ configuration with:
processExpired="true" processNonPersistent="true"

The normal Master/Slave processing seems to work correctly, actions on
Master are always replicated to the Slave.
But there's a problem: Expired messages do go to the Master's DLQ, but
this is not adapted in the Slave.

I debugged in the (Slave's) Code and found the appropriate
send-to-DLQ-Command/Message arriving at the MasterConnector.
But in further processing this message is filtered out as a duplicate(?)
(TransactionBroker.send() resp. ActiveMQMessageAudit.isDuplicate()). It
seems that this ProducerSequenceBit, which is checked there, was already
set... but here I'm a little bit lost in the code.

So, any ideas why this happens?

Some further note/question: A Slave also seems to have its own Timer to
look for expired messages in the queues, even if the Master is still
alive. Is that really intended? 
So in the szenario above, the Slave also generates a message to the DLQ
for its expired item. But this is filtered out as a duplicate, too. That
may be ok here if "normal replication" would work, but I'm generally not
sure if a Slave should really run it's own timeout checking of expired
messages at all, as long as he's not become a Master.

Best regards,
 Andreas