You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by de...@apache.org on 2013/06/25 13:48:35 UTC

svn commit: r1496430 - in /activemq/trunk: activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java activemq-unit-tests/src/test/java/org/apache/activemq/broker/region/QueuePurgeTest.java

Author: dejanb
Date: Tue Jun 25 11:48:35 2013
New Revision: 1496430

URL: http://svn.apache.org/r1496430
Log:
https://issues.apache.org/jira/browse/AMQ-4598 - negative queue size after purge

Modified:
    activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java
    activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/broker/region/QueuePurgeTest.java

Modified: activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java?rev=1496430&r1=1496429&r2=1496430&view=diff
==============================================================================
--- activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java (original)
+++ activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/region/Queue.java Tue Jun 25 11:48:35 2013
@@ -563,6 +563,7 @@ public class Queue extends BaseDestinati
                         }
                     }
                 }
+
                 for (MessageReference ref : unAckedMessages) {
                     QueueMessageReference qmr = (QueueMessageReference) ref;
                     if (qmr.getLockOwner() == sub) {
@@ -581,7 +582,9 @@ public class Queue extends BaseDestinati
                             }
                         }
                     }
-                    redeliveredWaitingDispatch.addMessageLast(qmr);
+                    if (!qmr.isDropped()) {
+                        redeliveredWaitingDispatch.addMessageLast(qmr);
+                    }
                 }
                 if (sub instanceof QueueBrowserSubscription) {
                     ((QueueBrowserSubscription)sub).decrementQueueRef();
@@ -1800,13 +1803,15 @@ public class Queue extends BaseDestinati
     }
 
     private void dropMessage(QueueMessageReference reference) {
-        reference.drop();
-        destinationStatistics.getMessages().decrement();
-        pagedInMessagesLock.writeLock().lock();
-        try{
-            pagedInMessages.remove(reference.getMessageId());
-        }finally {
-            pagedInMessagesLock.writeLock().unlock();
+        if (!reference.isDropped()) {
+            reference.drop();
+            destinationStatistics.getMessages().decrement();
+            pagedInMessagesLock.writeLock().lock();
+            try {
+                pagedInMessages.remove(reference.getMessageId());
+            } finally {
+                pagedInMessagesLock.writeLock().unlock();
+            }
         }
     }
 

Modified: activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/broker/region/QueuePurgeTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/broker/region/QueuePurgeTest.java?rev=1496430&r1=1496429&r2=1496430&view=diff
==============================================================================
--- activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/broker/region/QueuePurgeTest.java (original)
+++ activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/broker/region/QueuePurgeTest.java Tue Jun 25 11:48:35 2013
@@ -134,6 +134,14 @@ public class QueuePurgeTest extends Comb
         assertEquals("Queue size is not zero, it's " + proxy.getQueueSize(), 0,
                 proxy.getQueueSize());
         assertEquals("usage goes to duck", 0, proxy.getMemoryPercentUsage());
+        Message msg;
+        do {
+            msg = consumer.receive(1000);
+            if (msg != null) {
+                msg.acknowledge();
+            }
+        } while (msg != null);
+        assertEquals("Queue size not valid", 0, proxy.getQueueSize());
     }
 
     private QueueViewMBean getProxyToQueueViewMBean()