Github user wy96f commented on a diff in the pull request:

    https://github.com/apache/activemq-artemis/pull/2369#discussion_r224977450
  
    --- Diff: 
artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/cursor/impl/PageCursorProviderImpl.java
 ---
    @@ -599,6 +600,29 @@ private long checkMinPage(Collection<PageSubscription> 
cursorList) {
     
        }
     
    +   private void deliverIfNecessary(Collection<PageSubscription> 
cursorList) {
    +      long minPage = Long.MAX_VALUE;
    +      PageSubscription slowSubscription = null;
    +      int nonEmptyCursorNum = 0;
    +
    +      for (PageSubscription cursor : cursorList) {
    +         long firstPage = cursor.getFirstPage();
    +
    +         // the cursor will return -1 if the cursor is empty
    +         if (firstPage >= 0) {
    +            nonEmptyCursorNum++;
    +            if (firstPage < minPage) {
    +               minPage = firstPage;
    +               slowSubscription = cursor.getQueue().getMessageCount() == 0 
? cursor : null;
    +            }
    +         }
    +      }
    +
    +      if (nonEmptyCursorNum > 1 && slowSubscription != null) {
    --- End diff --
    
    > this is saving a deliveryAsync call.. but I"m just wondering if it would 
be too costly to do the check on every queue?
    
    All PageSubcriptions use the same executor and it will do many jobs such as 
PageSubscriptionImpl::cleanupEntries, DepageRunner, DeliverRunner, 
ExpiryScanner, PageCursorProviderImpl::scheduleCleanup, 
PageCursorProviderImpl::cleanup, etc. We'd better prevent these  extra needless 
deliverAsync calls.


---

Reply via email to