Github user wy96f commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/2369#discussion_r224977706 --- 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 -- > @clebertsuconic @wy96f > Not sure but deliverIfNecessary could be written simlar to this one? > > ``` > private void deliverIfNecessary(Collection<PageSubscription> cursorList, long minPage) { > for (PageSubscription cursor : cursorList) { > long firstPage = cursor.getFirstPage(); > if (firstPage == minPage) { > if (cursor.getQueue().getMessageCount() == 0) { > cursor.getQueue().deliverAsync(); > break; > } > } > } > } > ``` > As long as minPage is not Long.MAX_VALUE (it shouldn't be)... @clebertsuconic @franz1981 Great, it's more precise. We can also judge whether cursorList.size() > 1 bcs for the queue or topic with only one subscription in which case cursorList.size() == 1 we don't need to call deliverAsync again.
---