Repository: activemq-artemis Updated Branches: refs/heads/master fa3e37fdb -> 3384d6790
ARTEMIS-1800 - Fix metrics decrement on scheduled message cancel The queue metrics were being decremented improperly because on iteration over the cancelled scheduled messages because the flag for fromMessageReferences was not set to false. Setting the flag to false skips over the metrics update which is what we want as the scheduled messages were never added to the message references in the first place so the metrics don't need updating Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/70f0908b Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/70f0908b Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/70f0908b Branch: refs/heads/master Commit: 70f0908b4ee64e68059a21009db9dd3236c26732 Parents: fa3e37f Author: Christopher L. Shannon (cshannon) <[email protected]> Authored: Tue Apr 10 15:54:29 2018 -0400 Committer: Christopher L. Shannon (cshannon) <[email protected]> Committed: Tue Apr 10 15:54:29 2018 -0400 ---------------------------------------------------------------------- .../artemis/core/server/impl/QueueImpl.java | 2 +- .../management/QueueControlTest.java | 33 ++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/70f0908b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java index 0d018dc..5937491 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java @@ -1546,7 +1546,7 @@ public class QueueImpl extends CriticalComponentImpl implements Queue { List<MessageReference> cancelled = scheduledDeliveryHandler.cancel(filter1); for (MessageReference messageReference : cancelled) { - messageAction.actMessage(tx, messageReference); + messageAction.actMessage(tx, messageReference, false); count++; txCount++; } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/70f0908b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java ---------------------------------------------------------------------- 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 8bd5d03..5a49e2a 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 @@ -2510,6 +2510,39 @@ public class QueueControlTest extends ManagementTestBase { Assert.assertEquals(new String(body), "theBody"); } + @Test + public void testGetScheduledCountOnRemove() throws Exception { + long delay = Integer.MAX_VALUE; + SimpleString address = RandomUtil.randomSimpleString(); + SimpleString queue = RandomUtil.randomSimpleString(); + + session.createQueue(address, RoutingType.MULTICAST, queue, null, durable); + + QueueControl queueControl = createManagementControl(address, queue); + Assert.assertEquals(0, queueControl.getScheduledCount()); + + Field queueMemorySizeField = QueueImpl.class.getDeclaredField("queueMemorySize"); + queueMemorySizeField.setAccessible(true); + final LocalQueueBinding binding = (LocalQueueBinding) server.getPostOffice().getBinding(queue); + Queue q = binding.getQueue(); + AtomicInteger queueMemorySize1 = (AtomicInteger) queueMemorySizeField.get(q); + assertTrue(queueMemorySize1.get() == 0); + + ClientProducer producer = session.createProducer(address); + ClientMessage message = session.createMessage(durable); + message.putLongProperty(Message.HDR_SCHEDULED_DELIVERY_TIME, System.currentTimeMillis() + delay); + producer.send(message); + + queueControl.removeAllMessages(); + + Assert.assertEquals(0, queueControl.getMessageCount()); + + //Verify that original queue has a memory size of 0 + assertTrue(queueMemorySize1.get() == 0); + + session.deleteQueue(queue); + } + // Package protected --------------------------------------------- // Protected -----------------------------------------------------
