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 1ab2a41f33e01331fc5e0d9f136fa195a5633ae1 Author: Zhangao <[email protected]> AuthorDate: Fri Apr 7 15:08:42 2023 +0800 Execute clean indexes in finally (#3772) Execute clean indexes in finally (#3772) (cherry picked from commit 04e572b9bccd1502c0f2c4a87f23d760d4d0d9b5) --- .../ldb/SingleDirectoryDbLedgerStorage.java | 29 +++++++++++----------- 1 file changed, 14 insertions(+), 15 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 455f19fbe9..0f7135fa99 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 @@ -754,21 +754,6 @@ public class SingleDirectoryDbLedgerStorage implements CompactableLedgerStorage ledgerIndex.flush(); recordSuccessfulEvent(dbLedgerStorageStats.getFlushLedgerIndexStats(), ledgerIndexStartTime); - 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); - } - }); - lastCheckpoint = thisCheckpoint; // Discard all the entry from the write cache, since they're now persisted @@ -788,6 +773,20 @@ 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"); + } + + entryLocationIndex.removeOffsetFromDeletedLedgers(); + ledgerIndex.removeDeletedLedgers(); + } catch (Throwable t) { + log.warn("Failed to cleanup db indexes", t); + } + }); try { isFlushOngoing.set(false); } finally {
