Github user qihongxu commented on the issue:
https://github.com/apache/activemq-artemis/pull/2482
@michaelandrepearce
There are some cases will perform lots of rollbacks in a short period of
time. For example if we would like to upgrade our server while thousands of
consumers are receiving message, the close of server causes massive rollbacks
to original address, thus queue might blocked on reading GC'ed pages. Under
this circumstance the upgrade will take more than 5-10 minutes(e.g 2000
consumers) and make a negative impact on downstream systems.
> deliveryTime can be set in the constructor like transactionID , messageID
, etc :)
@wy96f
Yes we do find similar block in
PagedReferenceImpl::getScheduledDeliveryTime() since if deliveryTime is not set
it will call getMessage() during rollback.
To these two situations, detailed stacks are shown in attachment.
Considering priority only occupy one byte, it might be worthwhile to add it
in PageRef to improve stability:) As for deliveryTime, since it is already in
PageRef, we can simply add `this.deliveryTime =
message.getMessage().getScheduledDeliveryTime();` in constructor to avoid block
on rollback.
---