Repository: activemq
Updated Branches:
  refs/heads/activemq-5.15.x 1fe096cb2 -> bca0af413


AMQ-6947 - Update Queue metrics on expiration

The updated dropMessage method only decrements the destination metrics
if a message is removed from the pagedInMessages list to prevent
duplicate updates.  There is also a case where we still need to update
metrics if the message never makes it into the pagedInMessages list in
the first place and that is on expiration so this patch fixes that. A
couple existing tests found this issue.

(cherry picked from commit 6e468b4540754cad5cd30de373cadc026c998669)


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

Branch: refs/heads/activemq-5.15.x
Commit: bca0af4133a6e226783f8e953f1abe7d4e165743
Parents: 1fe096c
Author: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com>
Authored: Wed Apr 18 09:04:11 2018 -0400
Committer: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com>
Committed: Wed Apr 18 09:06:31 2018 -0400

----------------------------------------------------------------------
 .../java/org/apache/activemq/broker/region/Queue.java  | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/bca0af41/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 2946ac5..f669e41 100644
--- 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
@@ -1842,8 +1842,7 @@ public class Queue extends BaseDestination implements 
Task, UsageListener, Index
             pagedInMessagesLock.writeLock().lock();
             try {
                 if (pagedInMessages.remove(reference) != null) {
-                    getDestinationStatistics().getDequeues().increment();
-                    getDestinationStatistics().getMessages().decrement();
+                    updateMetricsOnMessageDrop();
                 }
             } finally {
                 pagedInMessagesLock.writeLock().unlock();
@@ -1851,6 +1850,11 @@ public class Queue extends BaseDestination implements 
Task, UsageListener, Index
         }
     }
 
+    private void updateMetricsOnMessageDrop() {
+        getDestinationStatistics().getDequeues().increment();
+        getDestinationStatistics().getMessages().decrement();
+    }
+
     public void messageExpired(ConnectionContext context, MessageReference 
reference) {
         messageExpired(context, null, reference);
     }
@@ -2007,6 +2011,11 @@ public class Queue extends BaseDestination implements 
Task, UsageListener, Index
                         if (processExpired && ref.isExpired()) {
                             if (broker.isExpired(ref)) {
                                 messageExpired(createConnectionContext(), ref);
+
+                                //We need to update the metrics here because 
the drop message
+                                //method will only update if the message was 
removed from the
+                                //pagedInMessages list which won't happen in 
this case
+                                updateMetricsOnMessageDrop();
                             } else {
                                 ref.decrementReferenceCount();
                             }

Reply via email to