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

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

commit fbc9c776587bc44c969a0aa058ff5aa460a20f63
Author: Hang Chen <[email protected]>
AuthorDate: Mon Apr 10 09:23:27 2023 +0800

    Fix keys leak in EntryLocationIndex when ledgersToDelete is empty (#3903)
    
    ### Motivation
    In EntryLocationIndex#removeOffsetFromDeletedLedgers, if there are no 
ledgers to delete, the key pair will leak.
    
    ### Changes
    Check the ledgers to deletion Set first, and if the set is not empty, then 
generate the keys.
    
    (cherry picked from commit ceba60565cf7cb438e9be4ab7416a2808b9168a1)
---
 .../apache/bookkeeper/bookie/storage/ldb/EntryLocationIndex.java   | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/EntryLocationIndex.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/EntryLocationIndex.java
index dc8e947ffc..41091f1b1d 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/EntryLocationIndex.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/EntryLocationIndex.java
@@ -195,9 +195,6 @@ public class EntryLocationIndex implements Closeable {
     private static final int DELETE_ENTRIES_BATCH_SIZE = 100000;
 
     public void removeOffsetFromDeletedLedgers() throws IOException {
-        LongPairWrapper firstKeyWrapper = LongPairWrapper.get(-1, -1);
-        LongPairWrapper lastKeyWrapper = LongPairWrapper.get(-1, -1);
-        LongPairWrapper keyToDelete = LongPairWrapper.get(-1, -1);
 
         Set<Long> ledgersToDelete = deletedLedgers.items();
 
@@ -205,6 +202,10 @@ public class EntryLocationIndex implements Closeable {
             return;
         }
 
+        LongPairWrapper keyToDelete = LongPairWrapper.get(-1, -1);
+        LongPairWrapper firstKeyWrapper = LongPairWrapper.get(-1, -1);
+        LongPairWrapper lastKeyWrapper = LongPairWrapper.get(-1, -1);
+
         log.info("Deleting indexes for ledgers: {}", ledgersToDelete);
         long startTime = System.nanoTime();
         long deletedEntries = 0;

Reply via email to