Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.21.0
-
None
-
None
Description
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)