aloyszhang commented on code in PR #16420:
URL: https://github.com/apache/pulsar/pull/16420#discussion_r915464235


##########
managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java:
##########
@@ -1482,18 +1482,17 @@ public synchronized void createComplete(int rc, final 
LedgerHandle lh, Object ct
             lastLedgerCreationFailureTimestamp = clock.millis();
         } else {
             log.info("[{}] Created new ledger {}", name, lh.getId());
-            ledgers.put(lh.getId(), 
LedgerInfo.newBuilder().setLedgerId(lh.getId()).setTimestamp(0).build());
-            currentLedger = lh;
-            currentLedgerEntries = 0;
-            currentLedgerSize = 0;
-
             final MetaStoreCallback<Void> cb = new MetaStoreCallback<Void>() {
                 @Override
                 public void operationComplete(Void v, Stat stat) {
                     if (log.isDebugEnabled()) {
                         log.debug("[{}] Updating of ledgers list after create 
complete. version={}", name, stat);
                     }
                     ledgersStat = stat;
+                    ledgers.put(lh.getId(), 
LedgerInfo.newBuilder().setLedgerId(lh.getId()).setTimestamp(0).build());

Review Comment:
   Agree with @mattisonchao. This may lead to data loss.
   
   Putting the newly created ledger into the `NavigableMap<Long, LedgerInfo> 
ledgers`, the new ledger can be seen immediately which means can write data 
into this ledger, and then if the meta-store operation failed, the ledger will 
be removed from both the `ledgers` and bookie, all data in this ledger are lost.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to