You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by pe...@apache.org on 2022/10/24 12:24:46 UTC

[pulsar] branch master updated: [fix][monitor] fix metrics string encoding (#18138)

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

penghui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 031e37c33b1 [fix][monitor] fix metrics string encoding (#18138)
031e37c33b1 is described below

commit 031e37c33b11b7513f458404c5e2fdfc4ae61a30
Author: Tao Jiuming <95...@users.noreply.github.com>
AuthorDate: Mon Oct 24 20:24:36 2022 +0800

    [fix][monitor] fix metrics string encoding (#18138)
---
 .../stats/prometheus/PrometheusMetricsServlet.java |  2 +-
 .../pulsar/utils/SimpleTextOutputStreamTest.java   | 23 ++++++++++++++++++++++
 .../pulsar/common/util/SimpleTextOutputStream.java |  8 +++-----
 3 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java
index 1c3277d5ee4..73309e88c29 100644
--- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java
+++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java
@@ -66,7 +66,7 @@ public class PrometheusMetricsServlet extends HttpServlet {
             HttpServletResponse res = (HttpServletResponse) context.getResponse();
             try {
                 res.setStatus(HTTP_STATUS_OK_200);
-                res.setContentType("text/plain");
+                res.setContentType("text/plain;charset=utf-8");
                 generateMetrics(cluster, res.getOutputStream());
             } catch (Exception e) {
                 long end = System.currentTimeMillis();
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/utils/SimpleTextOutputStreamTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/utils/SimpleTextOutputStreamTest.java
index e463c8d45ad..1722c4bbc13 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/utils/SimpleTextOutputStreamTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/utils/SimpleTextOutputStreamTest.java
@@ -118,4 +118,27 @@ public class SimpleTextOutputStreamTest {
         reset();
         return s;
     }
+
+    @Test
+    public void testWriteString() {
+        String str = "persistence://test/test/test_¬¬¬¬¬¬¬aabbcc";
+        stream.write(str);
+        assertEquals(str, str());
+    }
+
+
+    @Test
+    public void testWriteChar() {
+        String str = "persistence://test/test/test_¬¬¬¬¬¬¬aabbcc\"\n";
+        for (char c : str.toCharArray()) {
+            stream.write(c);
+        }
+        assertEquals(str, str());
+
+        buf.clear();
+
+        stream.write('\n').write('"').write('A').write('Z').write('a').write('z').write(' ').write(',').write('{')
+                .write('}').write('[').write(']').write('¬');
+        assertEquals(str(), "\n\"AZaz ,{}[]¬");
+    }
 }
diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/SimpleTextOutputStream.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/SimpleTextOutputStream.java
index dd78b4cfe58..87f4252f5c0 100644
--- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/SimpleTextOutputStream.java
+++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/SimpleTextOutputStream.java
@@ -19,6 +19,7 @@
 package org.apache.pulsar.common.util;
 
 import io.netty.buffer.ByteBuf;
+import io.netty.util.CharsetUtil;
 
 /**
  * Format strings and numbers into a ByteBuf without any memory allocation.
@@ -43,7 +44,7 @@ public class SimpleTextOutputStream {
     }
 
     public SimpleTextOutputStream write(char c) {
-        buffer.writeByte((byte) c);
+        write(String.valueOf(c));
         return this;
     }
 
@@ -51,11 +52,8 @@ public class SimpleTextOutputStream {
         if (s == null) {
             return this;
         }
-        int len = s.length();
-        for (int i = 0; i < len; i++) {
-            buffer.writeByte((byte) s.charAt(i));
-        }
 
+        buffer.writeCharSequence(s, CharsetUtil.UTF_8);
         return this;
     }