From fa6c9d9e7868bac92d8446180e630b51955a014c Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Wed, 8 Jun 2022 10:02:54 +0300 Subject: [PATCH] [ML] When skipping updating mark delete position, execute callback with executor to prevent deadlock --- .../apache/bookkeeper/mledger/impl/ManagedCursorImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 10d8d19eb33d3..605180710db0f 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 @@ -1896,7 +1896,8 @@ void internalMarkDelete(final MarkDeleteEntry mdEntry) { log.info("Skipping updating mark delete position to {}. The persisted mark delete position {} " + "is later.", mdEntry.newPosition, persistentMarkDeletePosition); } - mdEntry.triggerComplete(); + // run with executor to prevent deadlock + ledger.getExecutor().executeOrdered(ledger.getName(), safeRun(() -> mdEntry.triggerComplete())); return; } @@ -1914,7 +1915,8 @@ void internalMarkDelete(final MarkDeleteEntry mdEntry) { log.info("Skipping updating mark delete position to {}. The mark delete position update " + "in progress {} is later.", mdEntry.newPosition, inProgressLatest); } - mdEntry.triggerComplete(); + // run with executor to prevent deadlock + ledger.getExecutor().executeOrdered(ledger.getName(), safeRun(() -> mdEntry.triggerComplete())); return; }