You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by yo...@apache.org on 2023/06/19 07:42:34 UTC
[bookkeeper] 10/31: [Bug] SingleDirectoryDbLedgerStorage#flushMutex does not release lock on all exception paths (#3909)
This is an automated email from the ASF dual-hosted git repository.
yong pushed a commit to branch branch-4.16
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
commit 4b688521c3c32f51179242db08149b19ea0f3012
Author: StevenLuMT <ls...@126.com>
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 <lu...@didiglobal.com>
(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 9f089d9864..dd673f319a 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
@@ -843,21 +843,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();