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

chenhang pushed a commit to branch branch-4.14
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git

commit 9e0e1986f86acc9148a5175191ae97a1e492b43d
Author: Yan Zhao <[email protected]>
AuthorDate: Wed Feb 8 14:53:11 2023 +0800

    Fix memory leak when the Bookie is in read-only mode. (#3746)
    
    Descriptions of the changes in this PR:
    Fixes #3745
    
    (cherry picked from commit af82d14cb1da6a97b563b80e80b5d2fe462e2c4f)
---
 .../main/java/org/apache/bookkeeper/proto/BookieProtoEncoding.java    | 2 +-
 .../main/java/org/apache/bookkeeper/proto/PacketProcessorBase.java    | 4 +++-
 .../main/java/org/apache/bookkeeper/proto/WriteEntryProcessor.java    | 3 ---
 3 files changed, 4 insertions(+), 5 deletions(-)

diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieProtoEncoding.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieProtoEncoding.java
index 50fdd2f81c..4f7517bb61 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieProtoEncoding.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieProtoEncoding.java
@@ -173,7 +173,7 @@ public class BookieProtoEncoding {
                 packet.markReaderIndex();
                 return BookieProtocol.ParsedAddRequest.create(
                         version, ledgerId, entryId, flags,
-                        masterKey, packet.retain());
+                        masterKey, packet);
             }
 
             case BookieProtocol.READENTRY:
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PacketProcessorBase.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PacketProcessorBase.java
index 0ce855966f..7b642f524c 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PacketProcessorBase.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PacketProcessorBase.java
@@ -177,7 +177,9 @@ abstract class PacketProcessorBase<T extends Request> 
extends SafeRunnable {
             if (request instanceof BookieProtocol.ReadRequest) {
                 requestProcessor.onReadRequestFinish();
             }
-            if (request instanceof BookieProtocol.AddRequest) {
+            if (request instanceof BookieProtocol.ParsedAddRequest) {
+                ((BookieProtocol.ParsedAddRequest) request).release();
+                request.recycle();
                 requestProcessor.onAddRequestFinish();
             }
             return;
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/WriteEntryProcessor.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/WriteEntryProcessor.java
index 1d7caf5979..0daa3814d2 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/WriteEntryProcessor.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/WriteEntryProcessor.java
@@ -21,7 +21,6 @@ import com.google.common.annotations.VisibleForTesting;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.Channel;
 import io.netty.util.Recycler;
-
 import java.io.IOException;
 import java.util.concurrent.TimeUnit;
 
@@ -101,8 +100,6 @@ class WriteEntryProcessor extends 
PacketProcessorBase<ParsedAddRequest> implemen
                       request.ledgerId, request.entryId, t.getMessage(), t);
             // some bad request which cause unexpected exception
             rc = BookieProtocol.EBADREQ;
-        } finally {
-            addData.release();
         }
 
         if (rc != BookieProtocol.EOK) {

Reply via email to