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)