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