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) {
