You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2014/10/17 00:54:34 UTC

[2/6] git commit: https://issues.apache.org/jira/browse/AMQ-4930 - limit browse page in iterations in case cursor and store are out of sync - avoid a spin when store does not return messages

https://issues.apache.org/jira/browse/AMQ-4930  - limit browse page in iterations in case cursor and store are out of sync - avoid a spin when store does not return messages


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/8216e7f4
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/8216e7f4
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/8216e7f4

Branch: refs/heads/trunk
Commit: 8216e7f4d5e275cc41a3d21dea8d7ffaa430719e
Parents: 41ca0d9
Author: gtully <ga...@gmail.com>
Authored: Thu Oct 9 23:05:09 2014 +0100
Committer: gtully <ga...@gmail.com>
Committed: Thu Oct 16 23:35:17 2014 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/activemq/broker/region/Queue.java  | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/8216e7f4/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java
----------------------------------------------------------------------
diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java b/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java
index c4d49bd..6df48da 100755
--- a/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java
+++ b/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java
@@ -1104,8 +1104,15 @@ public class Queue extends BaseDestination implements Task, UsageListener, Index
     public void doBrowse(List<Message> browseList, int max) {
         final ConnectionContext connectionContext = createConnectionContext();
         try {
+            int maxPageInAttempts = 1;
+            messagesLock.readLock().lock();
+            try {
+                maxPageInAttempts += (messages.size() / getMaxPageSize());
+            } finally {
+                messagesLock.readLock().unlock();
+            }
 
-            while (shouldPageInMoreForBrowse(max)) {
+            while (shouldPageInMoreForBrowse(max) && maxPageInAttempts-- > 0) {
                 pageInMessages(!memoryUsage.isFull(110));
             };