This is an automated email from the ASF dual-hosted git repository.

michaelpearce pushed a commit to branch ARTEMIS-2873
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git

commit e1594cb5f2961fda57b3459cc1f2c310f7c5253a
Author: Michael Pearce <[email protected]>
AuthorDate: Thu Aug 6 00:12:02 2020 +0100

    [ARTEMIS-2873] Ensure configuation managed queues are not auto deleted
    these should only be removed if removed in configuration.
    Auto Delete Queues and Auto Delete Created Queues should only apply to NON 
configuration managed queues.
---
 .../core/server/impl/QueueConfigurationUtils.java    |  2 +-
 .../client/AutoDeleteCreatedQueueTest.java           | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueConfigurationUtils.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueConfigurationUtils.java
index ed90282..0b3b1ce 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueConfigurationUtils.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueConfigurationUtils.java
@@ -39,7 +39,7 @@ public class QueueConfigurationUtils {
       config.setPurgeOnNoConsumers(config.isPurgeOnNoConsumers() == null ? 
as.isDefaultPurgeOnNoConsumers() : config.isPurgeOnNoConsumers());
       config.setAutoCreateAddress(config.isAutoCreateAddress() == null ? 
as.isAutoCreateAddresses() : config.isAutoCreateAddress());
       // set the default auto-delete
-      config.setAutoDelete(config.isAutoDelete() == null ? 
(config.isAutoCreated() && as.isAutoDeleteQueues()) || (!config.isAutoCreated() 
&& as.isAutoDeleteCreatedQueues()) : config.isAutoDelete());
+      config.setAutoDelete(config.isAutoDelete() == null ? 
!config.isConfigurationManaged() && ((config.isAutoCreated() && 
as.isAutoDeleteQueues()) || (!config.isAutoCreated() && 
as.isAutoDeleteCreatedQueues())) : config.isAutoDelete());
 
       config.setAutoDeleteDelay(config.getAutoDeleteDelay() == null ? 
as.getAutoDeleteQueuesDelay() : config.getAutoDeleteDelay());
       config.setAutoDeleteMessageCount(config.getAutoDeleteMessageCount() == 
null ? as.getAutoDeleteQueuesMessageCount() : 
config.getAutoDeleteMessageCount());
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteCreatedQueueTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteCreatedQueueTest.java
index 8898f6d..88003ec 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteCreatedQueueTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteCreatedQueueTest.java
@@ -22,6 +22,7 @@ import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.api.core.client.ClientSessionFactory;
 import org.apache.activemq.artemis.api.core.client.ServerLocator;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import org.apache.activemq.artemis.core.server.Queue;
 import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
 import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
 import org.apache.activemq.artemis.tests.util.Wait;
@@ -32,6 +33,7 @@ public class AutoDeleteCreatedQueueTest extends 
ActiveMQTestBase {
 
    public final SimpleString addressA = new SimpleString("addressA");
    public final SimpleString queueA = new SimpleString("queueA");
+   public final SimpleString queueConfigurationManaged = new 
SimpleString("queueConfigurationManaged");
 
    private ServerLocator locator;
    private ActiveMQServer server;
@@ -59,4 +61,22 @@ public class AutoDeleteCreatedQueueTest extends 
ActiveMQTestBase {
       cf.createSession().createConsumer(queueA).close();
       Wait.assertTrue(() -> server.locateQueue(queueA) == null);
    }
+
+
+   @Test
+   public void 
testAutoDeleteCreatedQueueDoesNOTDeleteConfigurationManagedQueuesOnLastConsumerClose()
 throws Exception {
+      server.getAddressSettingsRepository().addMatch(addressA.toString(), new 
AddressSettings().setAutoDeleteCreatedQueues(true));
+      server.createQueue(new 
QueueConfiguration(queueA).setAddress(addressA).setRoutingType(RoutingType.MULTICAST).setAutoCreated(false));
+      server.createQueue(new 
QueueConfiguration(queueConfigurationManaged).setAddress(queueConfigurationManaged).setRoutingType(RoutingType.MULTICAST).setAutoCreated(false).setConfigurationManaged(true));
+      assertNotNull(server.locateQueue(queueA));
+      assertNotNull(server.locateQueue(queueConfigurationManaged));
+      assertTrue(server.locateQueue(queueA).isAutoDelete());
+      
assertFalse(server.locateQueue(queueConfigurationManaged).isAutoDelete());
+      cf.createSession().createConsumer(queueA).close();
+      cf.createSession().createConsumer(queueConfigurationManaged).close();
+      //Make sure the reaper has run by checking the queueA should be removed.
+      Wait.assertTrue(() -> server.locateQueue(queueA) == null);
+      //Check that our configuration managed queue is not removed.
+      assertNotNull(server.locateQueue(queueConfigurationManaged));
+   }
 }

Reply via email to