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

tison 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 d9538eac916 [improve][broker] Improve performance of 
`StatsOutputStream` by using `ArrayDeque` instead of `Stack`  (#20808)
d9538eac916 is described below

commit d9538eac916660df6b70cf82b0a3671b0a167567
Author: Kim, Joo Hyuk <[email protected]>
AuthorDate: Sat Aug 12 12:57:01 2023 +0900

    [improve][broker] Improve performance of `StatsOutputStream` by using 
`ArrayDeque` instead of `Stack`  (#20808)
---
 .../org/apache/pulsar/utils/StatsOutputStream.java | 22 ++++++++++++----------
 .../apache/pulsar/utils/StatsOutputStreamTest.java | 22 ++++++++++++++++++++++
 2 files changed, 34 insertions(+), 10 deletions(-)

diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/utils/StatsOutputStream.java 
b/pulsar-broker/src/main/java/org/apache/pulsar/utils/StatsOutputStream.java
index 1cd4afa650e..f0a9bf5fc69 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/utils/StatsOutputStream.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/utils/StatsOutputStream.java
@@ -19,11 +19,12 @@
 package org.apache.pulsar.utils;
 
 import io.netty.buffer.ByteBuf;
-import java.util.Stack;
+import java.util.ArrayDeque;
+import java.util.Deque;
 import org.apache.pulsar.common.util.SimpleTextOutputStream;
 
 public class StatsOutputStream extends SimpleTextOutputStream {
-    private final Stack<Boolean> separators = new Stack<>();
+    private final Deque<Boolean> separators = new ArrayDeque<>();
 
     public StatsOutputStream(ByteBuf buffer) {
         super(buffer);
@@ -31,7 +32,7 @@ public class StatsOutputStream extends SimpleTextOutputStream 
{
 
     public StatsOutputStream startObject() {
         checkSeparator();
-        separators.push(Boolean.FALSE);
+        separators.addLast(Boolean.FALSE);
         write('{');
         return this;
     }
@@ -39,19 +40,19 @@ public class StatsOutputStream extends 
SimpleTextOutputStream {
     public StatsOutputStream startObject(String key) {
         checkSeparator();
         write('"').writeEncoded(key).write("\":{");
-        separators.push(Boolean.FALSE);
+        separators.addLast(Boolean.FALSE);
         return this;
     }
 
     public StatsOutputStream endObject() {
-        separators.pop();
+        separators.removeLast();
         write('}');
         return this;
     }
 
     public StatsOutputStream startList() {
         checkSeparator();
-        separators.push(Boolean.FALSE);
+        separators.addLast(Boolean.FALSE);
         write('[');
         return this;
     }
@@ -59,12 +60,12 @@ public class StatsOutputStream extends 
SimpleTextOutputStream {
     public StatsOutputStream startList(String key) {
         checkSeparator();
         write('"').writeEncoded(key).write("\":[");
-        separators.push(Boolean.FALSE);
+        separators.addLast(Boolean.FALSE);
         return this;
     }
 
     public StatsOutputStream endList() {
-        separators.pop();
+        separators.removeLast();
         write(']');
         return this;
     }
@@ -121,10 +122,11 @@ public class StatsOutputStream extends 
SimpleTextOutputStream {
     private void checkSeparator() {
         if (separators.isEmpty()) {
             return;
-        } else if (separators.peek() == Boolean.TRUE) {
+        } else if (separators.peekLast() == Boolean.TRUE) {
             write(",");
         } else {
-            separators.set(separators.size() - 1, Boolean.TRUE);
+            separators.pollLast();
+            separators.addLast(Boolean.TRUE);
         }
     }
 }
diff --git 
a/pulsar-broker/src/test/java/org/apache/pulsar/utils/StatsOutputStreamTest.java
 
b/pulsar-broker/src/test/java/org/apache/pulsar/utils/StatsOutputStreamTest.java
index 4e6348d1d4a..02bc4132e09 100644
--- 
a/pulsar-broker/src/test/java/org/apache/pulsar/utils/StatsOutputStreamTest.java
+++ 
b/pulsar-broker/src/test/java/org/apache/pulsar/utils/StatsOutputStreamTest.java
@@ -150,4 +150,26 @@ public class StatsOutputStreamTest {
         reset();
         return s;
     }
+
+    @Test
+    public void testBehaviorOfStatsOutputStreamWithDeque() {
+        // Create a byte buffer for collecting output
+        ByteBuf buffer = Unpooled.buffer();
+
+        // Create an instance of StatsOutputStream using Deque
+        StatsOutputStream output = new StatsOutputStream(buffer);
+        output.startObject()
+                .writePair("name", "test")
+                .startList("items")
+                .writeItem(true)
+                .writeItem(123L)
+                .writeItem("sample")
+                .endList()
+                .endObject();
+        
+        // Assert
+        assertEquals(buffer.toString(java.nio.charset.StandardCharsets.UTF_8), 
+                "{\"name\":\"test\",\"items\":[true,123,\"sample\"]}");
+    }
+
 }

Reply via email to