You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by eo...@apache.org on 2021/06/22 10:00:36 UTC

[pulsar] branch branch-2.8 updated: Do not expose meaningless stats for consumer. (#11005)

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

eolivelli pushed a commit to branch branch-2.8
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/branch-2.8 by this push:
     new b54699e  Do not expose meaningless stats for consumer. (#11005)
b54699e is described below

commit b54699ee09000f50da73b5798740014328570295
Author: lipenghui <pe...@apache.org>
AuthorDate: Tue Jun 22 11:27:31 2021 +0800

    Do not expose meaningless stats for consumer. (#11005)
    
    * Do not expose meaningless stats for consumer.
    
    Currently we have exposed some meaningless consumer stats to users such as
    
    ```
    addressLength
    addressOffset
    connectedSinceOffset
    connectedSinceLength
    clientVersionOffset
    clientVersionLength
    stringBuffer
    ```
    
    All of these stats are not used by users but used internally.
    So remove these stats from the exposed consumer stats.
    
    * remove line
    
    (cherry picked from commit ae03e514a22f9bd181db13b61c92f37c626afd6e)
---
 .../pulsar/broker/stats/ConsumerStatsTest.java     | 46 ++++++++++++++++++++++
 .../policies/data/stats/ConsumerStatsImpl.java     |  8 ++++
 2 files changed, 54 insertions(+)

diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java
index c300249..f9eaa1b 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java
@@ -18,6 +18,9 @@
  */
 package org.apache.pulsar.broker.stats;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Sets;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.pulsar.client.admin.PulsarAdminException;
 import org.apache.pulsar.client.api.Consumer;
@@ -29,12 +32,14 @@ import org.apache.pulsar.common.policies.data.TopicStats;
 import org.apache.pulsar.broker.service.persistent.PersistentTopic;
 import org.apache.pulsar.common.policies.data.ConsumerStats;
 import org.apache.pulsar.common.policies.data.stats.ConsumerStatsImpl;
+import org.apache.pulsar.common.util.ObjectMapperFactory;
 import org.testng.Assert;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 @Slf4j
@@ -169,4 +174,45 @@ public class ConsumerStatsTest extends ProducerConsumerBase {
         Assert.assertEquals(updatedStats.getMsgOutCounter(), 10);
         Assert.assertEquals(updatedStats.getBytesOutCounter(), 1280);
     }
+
+    @Test
+    public void testConsumerStatsOutput() throws Exception {
+        Set<String> allowedFields = Sets.newHashSet(
+                "msgRateOut",
+                "msgThroughputOut",
+                "bytesOutCounter",
+                "msgOutCounter",
+                "msgRateRedeliver",
+                "chunkedMessageRate",
+                "consumerName",
+                "availablePermits",
+                "unackedMessages",
+                "avgMessagesPerEntry",
+                "blockedConsumerOnUnackedMsgs",
+                "readPositionWhenJoining",
+                "lastAckedTimestamp",
+                "lastConsumedTimestamp",
+                "keyHashRanges",
+                "metadata");
+
+        final String topicName = "persistent://prop/use/ns-abc/testConsumerStatsOutput";
+        final String subName = "my-subscription";
+
+        Consumer<byte[]> consumer = pulsarClient.newConsumer()
+                .topic(topicName)
+                .subscriptionType(SubscriptionType.Shared)
+                .subscriptionName(subName)
+                .subscribe();
+
+        TopicStats stats = admin.topics().getStats(topicName);
+        ObjectMapper mapper = ObjectMapperFactory.create();
+        JsonNode node = mapper.readTree(mapper.writer().writeValueAsString(stats.getSubscriptions()
+                .get(subName).getConsumers().get(0)));
+        if (node.fieldNames().hasNext()) {
+            String field = node.fieldNames().next();
+            Assert.assertTrue(allowedFields.contains(field));
+        }
+
+        consumer.close();
+    }
 }
diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/policies/data/stats/ConsumerStatsImpl.java b/pulsar-common/src/main/java/org/apache/pulsar/common/policies/data/stats/ConsumerStatsImpl.java
index 7a87ef8..47f6148 100644
--- a/pulsar-common/src/main/java/org/apache/pulsar/common/policies/data/stats/ConsumerStatsImpl.java
+++ b/pulsar-common/src/main/java/org/apache/pulsar/common/policies/data/stats/ConsumerStatsImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.pulsar.common.policies.data.stats;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Data;
 import org.apache.pulsar.common.policies.data.ConsumerStats;
 import java.util.List;
@@ -66,15 +67,21 @@ public class ConsumerStatsImpl implements ConsumerStats {
     public String readPositionWhenJoining;
 
     /** Address of this consumer. */
+    @JsonIgnore
     private int addressOffset = -1;
+    @JsonIgnore
     private int addressLength;
 
     /** Timestamp of connection. */
+    @JsonIgnore
     private int connectedSinceOffset = -1;
+    @JsonIgnore
     private int connectedSinceLength;
 
     /** Client library version. */
+    @JsonIgnore
     private int clientVersionOffset = -1;
+    @JsonIgnore
     private int clientVersionLength;
 
     public long lastAckedTimestamp;
@@ -90,6 +97,7 @@ public class ConsumerStatsImpl implements ConsumerStats {
      * In order to prevent multiple string object allocation under stats: create a string-buffer
      * that stores data for all string place-holders.
      */
+    @JsonIgnore
     private StringBuilder stringBuffer = new StringBuilder();
 
     public ConsumerStatsImpl add(ConsumerStatsImpl stats) {