From 264cec47262e871273f29adfa40a59d6f450a0e2 Mon Sep 17 00:00:00 2001 From: wangjinlong Date: Sun, 9 Jul 2023 00:03:49 +0800 Subject: [PATCH 1/2] fix headerBuffer not release. --- .../java/org/apache/bookkeeper/bookie/DefaultEntryLogger.java | 1 + 1 file changed, 1 insertion(+) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/DefaultEntryLogger.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/DefaultEntryLogger.java index 64c6508d67d..de344c0296d 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/DefaultEntryLogger.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/DefaultEntryLogger.java @@ -1027,6 +1027,7 @@ public void scanEntryLog(long entryLogId, EntryLogScanner scanner) throws IOExce pos += entrySize; } } finally { + ReferenceCountUtil.release(headerBuffer); ReferenceCountUtil.release(data); } } From 51ec6149ffa891c534de44f6b9f5fa1f8e954ecc Mon Sep 17 00:00:00 2001 From: wangjinlong Date: Tue, 25 Jul 2023 12:27:51 +0800 Subject: [PATCH 2/2] address comment --- .../org/apache/bookkeeper/bookie/DefaultEntryLogger.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/DefaultEntryLogger.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/DefaultEntryLogger.java index de344c0296d..100e2b85d83 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/DefaultEntryLogger.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/DefaultEntryLogger.java @@ -968,12 +968,18 @@ public void scanEntryLog(long entryLogId, EntryLogScanner scanner) throws IOExce // Buffer where to read the entrySize (4 bytes) and the ledgerId (8 bytes) ByteBuf headerBuffer = Unpooled.buffer(4 + 8); BufferedReadChannel bc; + boolean throwExceptionWhenGetChannel = false; // Get the BufferedChannel for the current entry log file try { bc = getChannelForLogId(entryLogId); } catch (IOException e) { LOG.warn("Failed to get channel to scan entry log: " + entryLogId + ".log"); + throwExceptionWhenGetChannel = true; throw e; + } finally { + if (throwExceptionWhenGetChannel) { + headerBuffer.release(); + } } // Start the read position in the current entry log file to be after // the header where all of the ledger entries are.