This is an automated email from the ASF dual-hosted git repository.

yong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new 44607a0e31 [fix]Fix entry loss due to incorrect lock of LedgerHandle 
(#4701)
44607a0e31 is described below

commit 44607a0e31ee8f979211eb5a4ef424de2871b92e
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
---
 .../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);

Reply via email to