This is an automated email from the ASF dual-hosted git repository.
yong pushed a commit to branch branch-4.17
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
The following commit(s) were added to refs/heads/branch-4.17 by this push:
new c16be136f3 [fix]Fix entry loss due to incorrect lock of LedgerHandle
(#4701)
c16be136f3 is described below
commit c16be136f3775b7773227431e2f8ef44b85c7e0e
Author: fengyubiao <[email protected]>
AuthorDate: Tue Jan 20 17:40:26 2026 +0800
[fix]Fix entry loss due to incorrect lock of LedgerHandle (#4701)
* [fix]Fix entry loss due to incorrect lock of LedgerHandle
(cherry picked from commit 44607a0e31ee8f979211eb5a4ef424de2871b92e)
---
.../main/java/org/apache/bookkeeper/bookie/HandleFactoryImpl.java | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/HandleFactoryImpl.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/HandleFactoryImpl.java
index ac87c3aed4..4862266d12 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/HandleFactoryImpl.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/HandleFactoryImpl.java
@@ -60,7 +60,11 @@ class HandleFactoryImpl implements HandleFactory,
LedgerDeletionListener {
throw
BookieException.create(BookieException.Code.LedgerFencedAndDeletedException);
}
handle = LedgerDescriptor.create(masterKey, ledgerId,
ledgerStorage);
- ledgers.putIfAbsent(ledgerId, handle);
+ LedgerDescriptor storedValue = ledgers.putIfAbsent(ledgerId,
handle);
+ // If it has been modified by other thread, use the previous one.
+ if (storedValue != null && storedValue != handle) {
+ return getHandle(ledgerId, masterKey, journalReplay);
+ }
}
handle.checkAccess(masterKey);