merlimat opened a new pull request #7715:
URL: https://github.com/apache/pulsar/pull/7715


   ### Motivation
   
   When forcifully deleting a topic that has active readers, there is a race 
condition that lead to a failure in deleting the topic.
   The race is
    1. Connected readers are closed and removed
    2. Since there's no active consumer on a non-durable subscription (eg: the 
reader sub), then we trigger the removal of the subscription and its cursor. 
That happens in background, in order to avoid deadlocking. See 
https://github.com/apache/pulsar/blob/26c49a85dd89d4282a625f02d16959de595d282f/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentSubscription.java#L274
    3. Once all consumers are closed, we then proceed in deleting the 
managed-ledger
    4. To delete the managed-ledger, we get the current list of cursors and 
delete all of them in parallel
    5. Since the cursors are removed in background, the list that we got might 
contain cursors that don't exist anymore when we try to delete them.
   
   ```
   org.apache.bookkeeper.mledger.ManagedLedgerException: ManagedCursor not 
found: reader-7d300cd535
        at 
org.apache.pulsar.broker.service.persistent.PersistentTopic$4.deleteLedgerFailed(PersistentTopic.java:884)
 ~[org.apache.pulsar-pulsar-broker-2.6.0.jar:2.6.0]
        at 
org.apache.bookkeeper.mledger.impl.ManagedLedgerImpl$16.deleteCursorFailed(ManagedLedgerImpl.java:2177)
 ~[org.apache.pulsar-managed-ledger-2.6.0.jar:2.6.0]
        at 
org.apache.bookkeeper.mledger.impl.ManagedLedgerImpl.asyncDeleteCursor(ManagedLedgerImpl.java:766)
 ~[org.apache.pulsar-managed-ledger-2.6.0.jar:2.6.0]
        at 
org.apache.bookkeeper.mledger.impl.ManagedLedgerImpl.asyncDelete(ManagedLedgerImpl.java:2156)
 ~[org.apache.pulsar-managed-ledger-2.6.0.jar:2.6.0]
        at 
org.apache.pulsar.broker.service.persistent.PersistentTopic.lambda$null$19(PersistentTopic.java:859)
 ~[org.apache.pulsar-pulsar-broker-2.6.0.jar:2.6.0]
        at 
java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 ~[?:?]
        at 
java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:883)
 ~[?:?]
        at 
java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2251)
 ~[?:?]
        at 
org.apache.pulsar.broker.service.persistent.PersistentTopic.lambda$delete$20(PersistentTopic.java:853)
 ~[org.apache.pulsar-pulsar-broker-2.6.0.jar:2.6.0]
        at 
java.util.concurrent.CompletableFuture.uniAcceptNow(CompletableFuture.java:753) 
~[?:?]
        at 
java.util.concurrent.CompletableFuture.uniAcceptStage(CompletableFuture.java:731)
 ~[?:?]
        at 
java.util.concurrent.CompletableFuture.thenAccept(CompletableFuture.java:2108) 
~[?:?]
        at 
org.apache.pulsar.broker.service.persistent.PersistentTopic.delete(PersistentTopic.java:843)
 ~[org.apache.pulsar-pulsar-broker-2.6.0.jar:2.6.0]
        at 
org.apache.pulsar.broker.service.persistent.PersistentTopic.deleteForcefully(PersistentTopic.java:791)
 ~[org.apache.pulsar-pulsar-broker-2.6.0.jar:2.6.0]
        at 
org.apache.pulsar.broker.service.BrokerService.deleteTopic(BrokerService.java:719)
 ~[org.apache.pulsar-pulsar-broker-2.6.0.jar:2.6.0]
   Caused by: org.apache.bookkeeper.mledger.ManagedLedgerException: 
ManagedCursor not found: reader-7d300cd535
   ```
   
   On topic deletion, we should be more tolerant of disappearing cursors and 
instead proceed as a success case.


----------------------------------------------------------------
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.

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


Reply via email to