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());
+ }
}