From 4618b192c22a91553530bdb76267d59c4a8516b5 Mon Sep 17 00:00:00 2001 From: Pat Fox Date: Thu, 31 Aug 2017 23:33:29 +0200 Subject: [PATCH] ARTEMIS-1381 add JMX operation removeAllMessages() to the queue fix checkstyle trailing spaces --- .../api/core/management/QueueControl.java | 8 +++++++ .../management/impl/QueueControlImpl.java | 5 ++++ .../management/QueueControlTest.java | 23 +++++++++++++++++++ .../management/QueueControlUsingCoreTest.java | 5 ++++ 4 files changed, 41 insertions(+) diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/QueueControl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/QueueControl.java index 89517aa1bd1..770d12c53c5 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/QueueControl.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/QueueControl.java @@ -246,6 +246,14 @@ public interface QueueControl { int removeMessages(@Parameter(name = "flushLimit", desc = "Limit to flush transactions during the operation to avoid OutOfMemory") int flushLimit, @Parameter(name = "filter", desc = "A message filter (can be empty)") String filter) throws Exception; + /** + * Removes all the message from the queue. + * + * @return the number of removed messages + */ + @Operation(desc = "Remove all the messages from the Queue (and returns the number of removed messages)", impact = MBeanOperationInfo.ACTION) + int removeAllMessages() throws Exception; + /** * Expires all the message corresponding to the specified filter. *
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java index 537ba8f5c83..52988d2b947 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java @@ -594,6 +594,11 @@ public int removeMessages(final int flushLimit, final String filterStr) throws E } } + @Override + public int removeAllMessages() throws Exception { + return removeMessages(FLUSH_LIMIT, null); + } + @Override public boolean expireMessage(final long messageID) throws Exception { checkStarted(); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java index 404f4669590..d28229262bb 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java @@ -1270,6 +1270,29 @@ public void testRemoveMessagesWithNullFilter() throws Exception { session.deleteQueue(queue); } + @Test + public void testRemoveAllMessages() throws Exception { + SimpleString address = RandomUtil.randomSimpleString(); + SimpleString queue = RandomUtil.randomSimpleString(); + + session.createQueue(address, queue, null, false); + ClientProducer producer = session.createProducer(address); + + // send on queue + producer.send(session.createMessage(false)); + producer.send(session.createMessage(false)); + + QueueControl queueControl = createManagementControl(address, queue); + Assert.assertEquals(2, getMessageCount(queueControl)); + + // removed matching messages to otherQueue + int removedMatchedMessagesCount = queueControl.removeAllMessages(); + Assert.assertEquals(2, removedMatchedMessagesCount); + Assert.assertEquals(0, getMessageCount(queueControl)); + + session.deleteQueue(queue); + } + @Test public void testRemoveMessagesWithEmptyFilter() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlUsingCoreTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlUsingCoreTest.java index f778ef608ab..0ba9c910768 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlUsingCoreTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlUsingCoreTest.java @@ -307,6 +307,11 @@ public int removeMessages(final int limit, final String filter) throws Exception return (Integer) proxy.invokeOperation(Integer.class, "removeMessages", limit, filter); } + @Override + public int removeAllMessages() throws Exception { + return (Integer) proxy.invokeOperation( "removeAllMessages"); + } + @Override public boolean removeMessage(final long messageID) throws Exception { return (Boolean) proxy.invokeOperation("removeMessage", messageID);