This is an automated email from the ASF dual-hosted git repository. clebertsuconic pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/artemis.git
commit d3fc03cf762d0f5d91375113486e77a3b5125892 Author: Clebert Suconic <[email protected]> AuthorDate: Tue Mar 3 09:59:29 2026 -0500 ARTEMIS-5376 Just adding a test showing an issue previously fixed This issue was fixed as part of commit e9dbc111f0c7ff4ce8941cb18bcae5edb07ae43a this is just an additional testing. --- .../artemis/tests/db/paging/PagingTest.java | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java index 02df5057fc..25e680258f 100644 --- a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java +++ b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java @@ -430,6 +430,79 @@ public class PagingTest extends ParameterDBTestBase { assertFalse(iterator.hasNext()); } + + @TestTemplate + public void testSimpleRemoveOrAckWhileIterate() throws Exception { + Configuration config = createDefaultInVMConfig(); + + final int PAGE_MAX = 20 * 1024; + + final int PAGE_SIZE = 10 * 1024; + + server = createServer(true, config, PAGE_SIZE, PAGE_MAX); + server.start(); + + final int numberOfBytes = 124; + + final int NUMBER_OF_MESSAGES = 201; + + locator.setBlockOnNonDurableSend(false).setBlockOnDurableSend(false).setBlockOnAcknowledge(false); + + + Queue queue = server.createQueue(QueueConfiguration.of(ADDRESS).setAddress(ADDRESS)); + assertNotNull(queue); + queue.pause(); + + PagingStore store = queue.getPagingStore(); + + store.startPaging(); + store.disableCleanup(); + + { + ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator)); + ClientSession session = sf.createSession(null, null, false, false, false, false, 0); + ClientProducer producer = session.createProducer(ADDRESS); + for (int i = 0; i < NUMBER_OF_MESSAGES; i++) { + ClientMessage message = session.createMessage(true); + + message.getBodyBuffer().writerIndex(0); + + message.getBodyBuffer().writeBytes(new byte[numberOfBytes]); + + for (int j = 1; j <= numberOfBytes; j++) { + message.getBodyBuffer().writeInt(j); + } + + message.putIntProperty("i", i); + + producer.send(message); + session.commit(); + } + session.close(); + } + + PageCursorProvider provider = store.getCursorProvider(); + + PageSubscription cursorSubscription = provider.getSubscription(queue.getID()); + PageIterator iterator1 = cursorSubscription.iterator(false); + PageIterator iterator2 = cursorSubscription.iterator(false); + + // simulating 2 open cursors.. they both stop and leave stuff for later + assertTrue(iterator1.hasNext()); + assertTrue(iterator2.hasNext()); + + PagedReference reference1 = iterator1.next(); + assertEquals(0, reference1.getPagedMessage().getMessage().getIntProperty("i")); + iterator1.remove(); + + + assertTrue(iterator2.hasNext()); + PagedReference reference2 = iterator2.next(); + assertEquals(1, reference2.getPagedMessage().getMessage().getIntProperty("i")); + + } + + @TestTemplate public void testSimpleCursorIteratorLargeMessage() throws Exception { Configuration config = createDefaultInVMConfig(); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
