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

lhotari pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 86eb2a82f2b6913d584efc75f1dd747be4a1a73a
Author: fengyubiao <[email protected]>
AuthorDate: Tue Dec 31 15:32:13 2024 +0800

    [fix][broker] Skip to persist cursor info if it failed by cursor closed 
(#23615)
    
    (cherry picked from commit 985060576bc9e290793c5815ff5f25f305c1515e)
---
 .../java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git 
a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java
 
b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java
index 655e8d0f2d8..e3e5fc27eea 100644
--- 
a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java
+++ 
b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java
@@ -3142,6 +3142,13 @@ public class ManagedCursorImpl implements ManagedCursor {
                 mbean.addWriteCursorLedgerSize(data.length);
                 callback.operationComplete();
             } else {
+                if (state == State.Closed) {
+                    // After closed the cursor, the in-progress persistence 
task will get a
+                    // BKException.Code.LedgerClosedException.
+                    callback.operationFailed(new 
CursorAlreadyClosedException(String.format("%s %s skipped this"
+                            + " persistence, because the cursor already 
closed", ledger.getName(), name)));
+                    return;
+                }
                 log.warn("[{}] Error updating cursor {} position {} in 
meta-ledger {}: {}", ledger.getName(), name,
                         position, lh1.getId(), BKException.getMessage(rc));
                 // If we've had a write error, the ledger will be 
automatically closed, we need to create a new one,

Reply via email to