This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/master by this push:
     new d53b2bc  ARTEMIS-2745 queue registering wrong metrics
     new 279d31a  This closes #3109
d53b2bc is described below

commit d53b2bcef6a19e403988a91e527998fa4b515e3e
Author: Justin Bertram <[email protected]>
AuthorDate: Thu Apr 30 12:36:47 2020 -0500

    ARTEMIS-2745 queue registering wrong metrics
---
 .../artemis/core/server/impl/QueueImpl.java        | 18 ++++++-------
 .../integration/plugin/MetricsPluginTest.java      | 31 ++++++++++++++++++++++
 2 files changed, 40 insertions(+), 9 deletions(-)

diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
index 405adf2..82e8870 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
@@ -4327,15 +4327,15 @@ public class QueueImpl extends CriticalComponentImpl 
implements Queue {
          MetricsManager metricsManager = server.getMetricsManager();
 
          metricsManager.registerQueueGauge(addressName, queueName, (builder) 
-> {
-            builder.register(QueueMetricNames.MESSAGE_COUNT, pendingMetrics, 
metrics -> Double.valueOf(pendingMetrics.getMessageCount()), 
QueueControl.MESSAGE_COUNT_DESCRIPTION);
-            builder.register(QueueMetricNames.DURABLE_MESSAGE_COUNT, 
pendingMetrics, metrics -> 
Double.valueOf(pendingMetrics.getDurableMessageCount()), 
QueueControl.DURABLE_MESSAGE_COUNT_DESCRIPTION);
-            builder.register(QueueMetricNames.PERSISTENT_SIZE, pendingMetrics, 
metrics -> Double.valueOf(pendingMetrics.getPersistentSize()), 
QueueControl.PERSISTENT_SIZE_DESCRIPTION);
-            builder.register(QueueMetricNames.DURABLE_PERSISTENT_SIZE, 
pendingMetrics, metrics -> 
Double.valueOf(pendingMetrics.getDurablePersistentSize()), 
QueueControl.DURABLE_PERSISTENT_SIZE_DESCRIPTION);
-
-            builder.register(QueueMetricNames.DELIVERING_MESSAGE_COUNT, 
deliveringMetrics, metrics -> 
Double.valueOf(deliveringMetrics.getMessageCount()), 
QueueControl.DELIVERING_MESSAGE_COUNT_DESCRIPTION);
-            
builder.register(QueueMetricNames.DELIVERING_DURABLE_MESSAGE_COUNT, 
deliveringMetrics, metrics -> 
Double.valueOf(deliveringMetrics.getDurableMessageCount()), 
QueueControl.DURABLE_DELIVERING_MESSAGE_COUNT_DESCRIPTION);
-            builder.register(QueueMetricNames.DELIVERING_PERSISTENT_SIZE, 
deliveringMetrics, metrics -> 
Double.valueOf(deliveringMetrics.getPersistentSize()), 
QueueControl.DELIVERING_SIZE_DESCRIPTION);
-            
builder.register(QueueMetricNames.DELIVERING_DURABLE_PERSISTENT_SIZE, 
deliveringMetrics, metrics -> 
Double.valueOf(deliveringMetrics.getDurablePersistentSize()), 
QueueControl.DURABLE_DELIVERING_SIZE_DESCRIPTION);
+            builder.register(QueueMetricNames.MESSAGE_COUNT, this, metrics -> 
Double.valueOf(getMessageCount()), QueueControl.MESSAGE_COUNT_DESCRIPTION);
+            builder.register(QueueMetricNames.DURABLE_MESSAGE_COUNT, this, 
metrics -> Double.valueOf(getDurableMessageCount()), 
QueueControl.DURABLE_MESSAGE_COUNT_DESCRIPTION);
+            builder.register(QueueMetricNames.PERSISTENT_SIZE, this, metrics 
-> Double.valueOf(getPersistentSize()), 
QueueControl.PERSISTENT_SIZE_DESCRIPTION);
+            builder.register(QueueMetricNames.DURABLE_PERSISTENT_SIZE, this, 
metrics -> Double.valueOf(getDurablePersistentSize()), 
QueueControl.DURABLE_PERSISTENT_SIZE_DESCRIPTION);
+
+            builder.register(QueueMetricNames.DELIVERING_MESSAGE_COUNT, this, 
metrics -> Double.valueOf(getDeliveringCount()), 
QueueControl.DELIVERING_MESSAGE_COUNT_DESCRIPTION);
+            
builder.register(QueueMetricNames.DELIVERING_DURABLE_MESSAGE_COUNT, this, 
metrics -> Double.valueOf(getDurableDeliveringCount()), 
QueueControl.DURABLE_DELIVERING_MESSAGE_COUNT_DESCRIPTION);
+            builder.register(QueueMetricNames.DELIVERING_PERSISTENT_SIZE, 
this, metrics -> Double.valueOf(getDeliveringSize()), 
QueueControl.DELIVERING_SIZE_DESCRIPTION);
+            
builder.register(QueueMetricNames.DELIVERING_DURABLE_PERSISTENT_SIZE, this, 
metrics -> Double.valueOf(getDurableDeliveringSize()), 
QueueControl.DURABLE_DELIVERING_SIZE_DESCRIPTION);
 
             builder.register(QueueMetricNames.SCHEDULED_MESSAGE_COUNT, this, 
metrics -> Double.valueOf(getScheduledCount()), 
QueueControl.SCHEDULED_MESSAGE_COUNT_DESCRIPTION);
             builder.register(QueueMetricNames.SCHEDULED_DURABLE_MESSAGE_COUNT, 
this, metrics -> Double.valueOf(getDurableScheduledCount()), 
QueueControl.DURABLE_SCHEDULED_MESSAGE_COUNT_DESCRIPTION);
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/plugin/MetricsPluginTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/plugin/MetricsPluginTest.java
index cab34b2..26fbd2b 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/plugin/MetricsPluginTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/plugin/MetricsPluginTest.java
@@ -38,6 +38,7 @@ import 
org.apache.activemq.artemis.api.core.client.ClientSessionFactory;
 import org.apache.activemq.artemis.api.core.client.ServerLocator;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
 import 
org.apache.activemq.artemis.core.server.metrics.plugins.SimpleMetricsPlugin;
+import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
 import org.apache.activemq.artemis.tests.util.Wait;
 import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
 import org.junit.Before;
@@ -198,6 +199,36 @@ public class MetricsPluginTest extends ActiveMQTestBase {
       checkMetric(metrics, "artemis.consumer.count", "queue", queueName, 0.0);
    }
 
+   @Test
+   public void testMessageCountWithPaging() throws Exception {
+      final String data = "Simple Text " + UUID.randomUUID().toString();
+      final String queueName = "simpleQueue";
+      final String addressName = "simpleAddress";
+
+      
server.getAddressSettingsRepository().getMatch(addressName).setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE).setMaxSizeBytes(1024
 * 10).setPageSizeBytes(1024 * 5);
+
+      session.createQueue(new 
QueueConfiguration(queueName).setAddress(addressName).setRoutingType(RoutingType.ANYCAST));
+      ClientProducer producer = session.createProducer(addressName);
+      ClientMessage message = session.createMessage(true);
+      message.getBodyBuffer().writeString(data);
+      long messageCount = 0;
+      while (!server.getPagingManager().getPageStore(new 
SimpleString(addressName)).isPaging()) {
+         producer.send(message);
+         messageCount++;
+      }
+
+      Wait.assertEquals(messageCount, 
server.locateQueue(queueName)::getMessageCount, 2000, 100);
+      checkMetric(getMetrics(), "artemis.message.count", "queue", queueName, 
Double.valueOf(messageCount));
+
+      for (int i = 0; i < messageCount; i++) {
+         producer.send(message);
+      }
+      producer.close();
+
+      Wait.assertEquals(messageCount * 2, 
server.locateQueue(queueName)::getMessageCount, 2000, 100);
+      checkMetric(getMetrics(), "artemis.message.count", "queue", queueName, 
Double.valueOf(messageCount * 2));
+   }
+
    public Map<Meter.Id, Double> getMetrics() {
       Map<Meter.Id, Double> metrics = new HashMap<>();
       List<Meter> meters = 
server.getMetricsManager().getMeterRegistry().getMeters();

Reply via email to