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 6ff45d1fc1d4ed7d6d5ed14e4f30180296c43769 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 8e970cae73..dd2027e47b 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 @@ -667,21 +667,22 @@ public class SingleDirectoryDbLedgerStorage implements CompactableLedgerStorage // Wrap unchecked exceptions throw new IOException(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();
