This is an automated email from the ASF dual-hosted git repository.
sanjeevrk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 03131fb Fixed race condition on deleting topic with active readers
(#7715)
03131fb is described below
commit 03131fb7f4d7bc3bb551acbc4d5117465ad22b53
Author: Matteo Merli <[email protected]>
AuthorDate: Sun Aug 2 12:47:55 2020 -0700
Fixed race condition on deleting topic with active readers (#7715)
---
.../org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git
a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
index eaf06fc..02d8453 100644
---
a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
+++
b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
@@ -94,6 +94,7 @@ import org.apache.bookkeeper.mledger.ManagedLedger;
import org.apache.bookkeeper.mledger.ManagedLedgerConfig;
import org.apache.bookkeeper.mledger.ManagedLedgerException;
import
org.apache.bookkeeper.mledger.ManagedLedgerException.BadVersionException;
+import
org.apache.bookkeeper.mledger.ManagedLedgerException.CursorNotFoundException;
import
org.apache.bookkeeper.mledger.ManagedLedgerException.InvalidCursorPositionException;
import
org.apache.bookkeeper.mledger.ManagedLedgerException.ManagedLedgerAlreadyClosedException;
import
org.apache.bookkeeper.mledger.ManagedLedgerException.ManagedLedgerFencedException;
@@ -2229,7 +2230,14 @@ public class ManagedLedgerImpl implements ManagedLedger,
CreateCallback {
@Override
public void deleteCursorFailed(ManagedLedgerException
exception, Object ctx) {
- log.warn("[{}] Failed to delete cursor {} : {}", name,
cursor, exception);
+ if (exception instanceof CursorNotFoundException) {
+ // This could happen if a cursor is getting deleted
while we are deleting the topic
+ // Treating this as a "success" case, since the cursor
is gone in any case.
+ deleteCursorComplete(ctx);
+ return;
+ }
+
+ log.warn("[{}] Failed to delete cursor {}: {}", name,
cursor, exception.getMessage(), exception);
cursorDeleteException.compareAndSet(null, exception);
if (cursorsToDelete.decrementAndGet() == 0) {
// Trigger callback only once