You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by GitBox <gi...@apache.org> on 2022/09/09 00:56:01 UTC

[GitHub] [pulsar] zymap commented on a diff in pull request #17228: [fix][storage] refresh the ledgers map when the offload complete failed

zymap commented on code in PR #17228:
URL: https://github.com/apache/pulsar/pull/17228#discussion_r966532291


##########
managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java:
##########
@@ -2357,6 +2357,42 @@ private void maybeOffloadInBackground(CompletableFuture<PositionImpl> promise) {
         }
     }
 
+    // Although we have caught the connection loss exception on the meta store, to avoid other exceptions cause
+    // the mismatch between meta store and in memory, we refresh the ledger info list when the offload execute
+    // failed by badversion
+    private void asyncRefreshLedgersInfoOnBadVersion(ManagedLedgerException exception) {
+        if (!(exception instanceof BadVersionException)) {
+            return;
+        }
+        if (!metadataMutex.tryLock()) {
+            scheduledExecutor.schedule(
+                () -> asyncRefreshLedgersInfoOnBadVersion(exception), 100, TimeUnit.MILLISECONDS);
+            return;
+        }
+        store.getManagedLedgerInfo(name, false, new MetaStoreCallback<>() {
+            @Override
+            public void operationComplete(ManagedLedgerInfo mlInfo, Stat stat) {
+                ledgersStat = stat;
+                try {
+                    synchronized (ManagedLedgerImpl.this) {

Review Comment:
   All the ledger's update operations should be guarded by the metadata lock because it needs to make sure the ledger stat is the latest version. 
   And the synchronized to make sure there hasn't remove/add operation when the ledger is closing or creating.
   
   I haven't found other places to operate the map without locks. Do you know if other places still have concurrency issues?
   



-- 
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: commits-unsubscribe@pulsar.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org