[
https://issues.apache.org/jira/browse/ARTEMIS-2123?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16649191#comment-16649191
]
ASF GitHub Bot commented on ARTEMIS-2123:
-----------------------------------------
Github user wy96f commented on a diff in the pull request:
https://github.com/apache/activemq-artemis/pull/2369#discussion_r224976264
--- 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) {
+ slowSubscription.getQueue().deliverAsync();
--- End diff --
> Just to understand the fix: given that QueueImpl::deliverAsync will
trigger QueueImpl::checkDepage that will schedule an async task
QueueImpl::DepageRunner how do you know that it will be finished time in order
to have the PageSubscription completed when it will check later on the same
cleanup call?
> From what I have understood it will be eventually completed on the
cleanup that will follow a successfull DepageRunner::run...
Yes, that's right. A successful DepageRunner::run will trigger
PageSubscription::processACK, then PageSubscription::cleanupEntries, and lastly
PageCursorProvider::cleanup.
> Paging not stopped if there are no consumers on one subscription
> ----------------------------------------------------------------
>
> Key: ARTEMIS-2123
> URL: https://issues.apache.org/jira/browse/ARTEMIS-2123
> Project: ActiveMQ Artemis
> Issue Type: Bug
> Components: Broker
> Affects Versions: 2.6.3
> Reporter: yangwei
> Priority: Major
>
> Reproduction steps:
> # create a topic t and two subscriptions ta, tb
> # send messages to ta and tb
> # create ta consumers and receive all messages from ta
> # close consumers
> # only send message to tb
> # create tb consumers and receive all message from tb
> # topic not stopped paging
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)