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


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 9883d92ed0e [fix][ml] Cursor ignores the position that has an empty 
ack-set if disabled deletionAtBatchIndexLevelEnabled (#24406)
9883d92ed0e is described below

commit 9883d92ed0edec4bac4556467d55240662a0fd47
Author: fengyubiao <[email protected]>
AuthorDate: Fri Jun 13 13:52:56 2025 +0800

    [fix][ml] Cursor ignores the position that has an empty ack-set if disabled 
deletionAtBatchIndexLevelEnabled (#24406)
    
    (cherry picked from commit 3bd70fd74fd2586724d4830c140a42517e028959)
---
 .../apache/bookkeeper/mledger/impl/ManagedCursorImpl.java |  2 +-
 .../apache/bookkeeper/mledger/impl/ManagedCursorTest.java | 15 +++++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

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 b1ebc097492..444e53cc16b 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
@@ -2377,7 +2377,7 @@ public class ManagedCursorImpl implements ManagedCursor {
                     }
                     continue;
                 }
-                if (position.ackSet == null) {
+                if (position.ackSet == null || position.ackSet.length == 0) {
                     if (batchDeletedIndexes != null) {
                         batchDeletedIndexes.remove(position);
                     }
diff --git 
a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java
 
b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java
index 47497a37617..d223164a07c 100644
--- 
a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java
+++ 
b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java
@@ -5218,5 +5218,20 @@ public class ManagedCursorTest extends 
MockedBookKeeperTestCase {
         assertEquals(positionRef4.get(), position4);
     }
 
+    @Test
+    public void testDeleteBatchedMessageWithEmptyAckSet() throws Exception {
+        ManagedLedgerConfig managedLedgerConfig = new ManagedLedgerConfig();
+        managedLedgerConfig.setDeletionAtBatchIndexLevelEnabled(false);
+        ManagedLedgerImpl ml = (ManagedLedgerImpl) 
factory.open("testDeleteBatchedMessageWithEmptyAckSet",
+            managedLedgerConfig);
+        ManagedCursorImpl cursor = (ManagedCursorImpl) ml.openCursor("c1");
+        Position position = ml.addEntry(new byte[1]);
+        Position positionWithEmptyAckSet =
+                new PositionImpl(position.getLedgerId(), 
position.getEntryId(), new long[]{});
+        cursor.delete(positionWithEmptyAckSet);
+        assertEquals(cursor.markDeletePosition, position);
+        ml.delete();
+    }
+
     private static final Logger log = 
LoggerFactory.getLogger(ManagedCursorTest.class);
 }

Reply via email to