Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Fixed
-
0.6, 0.7, 0.8, 0.9, 0.10, 0.11, 0.12
-
None
Description
The Java client can reject/release up to the first <total number of messages received on the session> sent by the broker following the first rollback after failover.
When failover occurs, the rollback mark is set to -1 however the highestDeliveryTag is not cleared, and so upon the first rollback performed after failover this will set the rollback mark to <highestDeliveryTag>, which is either the number of messages received by the Session (0-8/0-9/0-9-1) or anything up to that value (0-10, where the message delivery tags are the per-connection command IDs associated with each MessageTransfer, and all other commands). This makes the client reject/release all incoming messages until the deliveryTag passes the rollback mark and the messages are allowed through the Dispatcher.
This could cause significant delays in message processing after failover, and may result in messages arriving out of order because earlier rejects/release get processed by the broker and cause it to re-dispatch earlier messages on the queue within the ongoing flow of later messages just being sent for the first time.
The deliveryTag marker should also be reset during the failover cleanup process.