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);
}