From ea09a0fd39290d63a711f4353096a7092f2a6cfd Mon Sep 17 00:00:00 2001 From: Justin Bertram Date: Thu, 5 Mar 2020 21:00:15 -0600 Subject: [PATCH] ARTEMIS-2638 retro resources created recursively w/# match --- .../core/postoffice/impl/PostOfficeImpl.java | 2 +- .../server/RetroactiveAddressTest.java | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java index f74c505686..7f207c9966 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java @@ -466,7 +466,7 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding server.callBrokerAddressPlugins(plugin -> plugin.afterAddAddress(addressInfo, reload)); } long retroactiveMessageCount = addressSettingsRepository.getMatch(addressInfo.getName().toString()).getRetroactiveMessageCount(); - if (retroactiveMessageCount > 0) { + if (retroactiveMessageCount > 0 && !addressInfo.isInternal() && !ResourceNames.isRetroactiveResource(server.getInternalNamingPrefix(), addressInfo.getName())) { createRetroactiveResources(addressInfo.getName(), retroactiveMessageCount, reload); } if (ResourceNames.isRetroactiveResource(server.getInternalNamingPrefix(), addressInfo.getName())) { diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/RetroactiveAddressTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/RetroactiveAddressTest.java index 21a8dc30ae..06bce01257 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/RetroactiveAddressTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/RetroactiveAddressTest.java @@ -100,13 +100,22 @@ public class RetroactiveAddressTest extends ActiveMQTestBase { } @Test - public void testRetroactiveResourceCreation() throws Exception { - final SimpleString addressName = SimpleString.toSimpleString("myAddress"); + public void testRetroactiveResourceCreationWithExactMatch() throws Exception { + internalTestRetroactiveResourceCreation("myAddress", "myAddress"); + } + + @Test + public void testRetroactiveResourceCreationWithWildcardMatch() throws Exception { + internalTestRetroactiveResourceCreation("myAddress", "#"); + } + + private void internalTestRetroactiveResourceCreation(String address, String match) throws Exception { + final SimpleString addressName = SimpleString.toSimpleString(address); final SimpleString divertAddress = ResourceNames.getRetroactiveResourceAddressName(internalNamingPrefix, delimiter, addressName); final SimpleString divertMulticastQueue = ResourceNames.getRetroactiveResourceQueueName(internalNamingPrefix, delimiter, addressName, RoutingType.MULTICAST); final SimpleString divertAnycastQueue = ResourceNames.getRetroactiveResourceQueueName(internalNamingPrefix, delimiter, addressName, RoutingType.ANYCAST); final SimpleString divert = ResourceNames.getRetroactiveResourceDivertName(internalNamingPrefix, delimiter, addressName); - server.getAddressSettingsRepository().addMatch(addressName.toString(), new AddressSettings().setRetroactiveMessageCount(10)); + server.getAddressSettingsRepository().addMatch(match, new AddressSettings().setRetroactiveMessageCount(10)); server.addAddressInfo(new AddressInfo(addressName)); assertNotNull(server.getAddressInfo(divertAddress)); assertNotNull(server.locateQueue(divertMulticastQueue));