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.


---

Reply via email to