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.
---