From 71cedd7384e6c44be8c260f485b2b4d7fc5585a2 Mon Sep 17 00:00:00 2001 From: Heesung Sohn Date: Fri, 27 Jan 2023 17:06:59 -0800 Subject: [PATCH] [improve][broker] added isActive in ManagedCursorImpl --- .../bookkeeper/mledger/impl/ManagedCursorImpl.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 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 5b351c99649ed..34cd26274ffa0 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 @@ -218,6 +218,9 @@ public class ManagedCursorImpl implements ManagedCursor { private static final String COMPACTION_CURSOR_NAME = "__compaction"; private volatile boolean cacheReadEntry = false; + // active state cache in ManagedCursor. It should be in sync with the state in activeCursors in ManagedLedger. + private volatile boolean isActive = false; + class MarkDeleteEntry { final PositionImpl newPosition; final MarkDeleteCallback callback; @@ -1208,19 +1211,23 @@ public void asyncFindNewestMatching(FindPositionConstraint constraint, Predicate @Override public void setActive() { - if (!alwaysInactive) { + if (!isActive && !alwaysInactive) { ledger.activateCursor(this); + isActive = true; } } @Override public boolean isActive() { - return ledger.isCursorActive(this); + return isActive; } @Override public void setInactive() { - ledger.deactivateCursor(this); + if (isActive) { + ledger.deactivateCursor(this); + isActive = false; + } } @Override