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

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


The following commit(s) were added to refs/heads/branch-2.9 by this push:
     new 31c0a2ea97a [fix][offload] Fix memory leak while Offloading ledgers 
(#18500)
31c0a2ea97a is described below

commit 31c0a2ea97a494b48363fd3e51c854d7a7626ad3
Author: Enrico Olivelli <[email protected]>
AuthorDate: Wed Nov 16 13:44:43 2022 +0100

    [fix][offload] Fix memory leak while Offloading ledgers (#18500)
    
    (cherry picked from commit 6ff7d459697c2496de29ef077eb0f574632ebe6d)
---
 .../jcloud/impl/BlockAwareSegmentInputStreamImpl.java     |  2 +-
 .../jcloud/impl/BlockAwareSegmentInputStreamTest.java     | 15 +++++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git 
a/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlockAwareSegmentInputStreamImpl.java
 
b/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlockAwareSegmentInputStreamImpl.java
index b69f9f5e785..e5dbcb64347 100644
--- 
a/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlockAwareSegmentInputStreamImpl.java
+++ 
b/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlockAwareSegmentInputStreamImpl.java
@@ -261,7 +261,7 @@ public class BlockAwareSegmentInputStreamImpl extends 
BlockAwareSegmentInputStre
         // And through debug, writeBlobStore.uploadMultipartPart in the 
offload method also will trigger
         // the close method.
         // So we add the close variable to avoid release paddingBuf twice.
-        if (!close.compareAndSet(false, true)) {
+        if (close.compareAndSet(false, true)) {
             super.close();
             dataBlockHeaderStream.close();
             if (!entriesByteBuf.isEmpty()) {
diff --git 
a/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlockAwareSegmentInputStreamTest.java
 
b/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlockAwareSegmentInputStreamTest.java
index 0cd4bbd70a9..fff1ce8b7aa 100644
--- 
a/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlockAwareSegmentInputStreamTest.java
+++ 
b/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlockAwareSegmentInputStreamTest.java
@@ -30,6 +30,7 @@ import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.lang.reflect.Field;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.Iterator;
@@ -798,4 +799,18 @@ public class BlockAwareSegmentInputStreamTest {
 
         inputStream.close();
     }
+
+    @Test
+    public void testCloseReleaseResources() throws Exception {
+        ReadHandle readHandle = new MockReadHandle(1, 10, 10);
+
+        BlockAwareSegmentInputStreamImpl inputStream = new 
BlockAwareSegmentInputStreamImpl(readHandle, 0, 1024);
+        inputStream.read();
+        Field field = 
BlockAwareSegmentInputStreamImpl.class.getDeclaredField("paddingBuf");
+        field.setAccessible(true);
+        ByteBuf paddingBuf = (ByteBuf) field.get(inputStream);
+        assertEquals(1, paddingBuf.refCnt());
+        inputStream.close();
+        assertEquals(0, paddingBuf.refCnt());
+    }
 }

Reply via email to