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 9c0f42851bd2fa468d8ca2e2c40703fc26ff70ce
Author: StevenLuMT <[email protected]>
AuthorDate: Fri Apr 7 18:33:19 2023 +0800

    [Bug] SingleDirectoryDbLedgerStorage#flushMutex does not release lock on 
all exception paths (#3909)
    
    Co-authored-by: lushiji <[email protected]>
    (cherry picked from commit f1657eaf4cbe7257a729ab784ddf2b002e989300)
---
 .../ldb/SingleDirectoryDbLedgerStorage.java        | 27 +++++++++++-----------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/SingleDirectoryDbLedgerStorage.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/SingleDirectoryDbLedgerStorage.java
index 0f7135fa99..a221283691 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/SingleDirectoryDbLedgerStorage.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/SingleDirectoryDbLedgerStorage.java
@@ -773,21 +773,22 @@ public class SingleDirectoryDbLedgerStorage implements 
CompactableLedgerStorage
             // Leave IOExecption as it is
             throw e;
         } finally {
-            cleanupExecutor.execute(() -> {
-                // There can only be one single cleanup task running because 
the cleanupExecutor
-                // is single-threaded
-                try {
-                    if (log.isDebugEnabled()) {
-                        log.debug("Removing deleted ledgers from db indexes");
+            try {
+                cleanupExecutor.execute(() -> {
+                    // There can only be one single cleanup task running 
because the cleanupExecutor
+                    // is single-threaded
+                    try {
+                        if (log.isDebugEnabled()) {
+                            log.debug("Removing deleted ledgers from db 
indexes");
+                        }
+
+                        entryLocationIndex.removeOffsetFromDeletedLedgers();
+                        ledgerIndex.removeDeletedLedgers();
+                    } catch (Throwable t) {
+                        log.warn("Failed to cleanup db indexes", t);
                     }
+                });
 
-                    entryLocationIndex.removeOffsetFromDeletedLedgers();
-                    ledgerIndex.removeDeletedLedgers();
-                } catch (Throwable t) {
-                    log.warn("Failed to cleanup db indexes", t);
-                }
-            });
-            try {
                 isFlushOngoing.set(false);
             } finally {
                 flushMutex.unlock();

Reply via email to