Stephen Baker created ARTEMIS-3766: -------------------------------------- Summary: Race condition with Dual Mirror and Expiry Key: ARTEMIS-3766 URL: https://issues.apache.org/jira/browse/ARTEMIS-3766 Project: ActiveMQ Artemis Issue Type: Bug Affects Versions: 2.21.0 Reporter: Stephen Baker
When dual mirroring is in play there is a race condition which can result in missing or duplicate messages on the brokers. Scenario 1: # Bring up two artemis instances with broker-connection mirroring between each other. (A and B) # Send a message to A with a short TTL (I used 30 seconds in my test) # After the message mirrors but before it expires, pause the Mirror queue on both sides # Wait for the message to expire, and the reaper thread to pick it up # Observe that on both sides the message has moved to the ExpiryQueue. In the Mirror queue there are 2 messages on A (a message destined to the ExpiryQueue and an ack on the original message). On B there is a single message in the mirror, which is the message to the expiry queue. # Resume the mirror, I'm not sure the order matters, but I did B and then A. # Observe that on A there is a single message in the ExpiryQueue, but on B there are now 2 messages in the expiry queue. Scenario 2: # Bring up two artemis instances with broker-connection mirroring between each other. (A and B). On A disable the reaper thread by setting `<message-expiry-scan-period>-1</message-expiry-scan-period>` # Send a message to A with a short TTL # Wait for the TTL to expire # On B the message moves to the ExpiryQueue, on A the message ends disappears (no longer in the ExpiryQueue nor the original queue) -- This message was sent by Atlassian Jira (v8.20.1#820001)