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

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


The following commit(s) were added to refs/heads/main by this push:
     new a7f18777a3 ARTEMIS-4563 Remove auto-created addresses upon restart
a7f18777a3 is described below

commit a7f18777a32cde23e490e5d162b90e5724146f8b
Author: Domenico Francesco Bruscino <[email protected]>
AuthorDate: Wed Jan 10 15:02:22 2024 +0100

    ARTEMIS-4563 Remove auto-created addresses upon restart
---
 .../core/postoffice/impl/SimpleAddressManager.java  |  2 +-
 .../tests/integration/client/AutoCreateTest.java    | 21 +++++++++++++++++----
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
index 3b96de204c..e1256f276a 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
@@ -371,7 +371,7 @@ public class SimpleAddressManager implements AddressManager 
{
    public boolean checkAutoRemoveAddress(AddressInfo addressInfo,
                                          AddressSettings settings,
                                          boolean ignoreDelay) throws Exception 
{
-      return settings.isAutoDeleteAddresses() && addressInfo != null && 
addressInfo.isAutoCreated() && 
!bindingsFactory.isAddressBound(addressInfo.getName()) && 
addressWasUsed(addressInfo, settings) && (ignoreDelay || 
delayCheck(addressInfo, settings));
+      return settings.isAutoDeleteAddresses() && addressInfo != null && 
addressInfo.isAutoCreated() && 
!bindingsFactory.isAddressBound(addressInfo.getName()) && (ignoreDelay || 
addressWasUsed(addressInfo, settings)) && (ignoreDelay || 
delayCheck(addressInfo, settings));
    }
 
    private boolean delayCheck(AddressInfo addressInfo, AddressSettings 
settings) {
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateTest.java
index 18a3fac951..a256ec9aad 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateTest.java
@@ -353,7 +353,8 @@ public class AutoCreateTest extends ActiveMQTestBase {
 
       server.getConfiguration().setAddressQueueScanPeriod(-1); // disabling 
scanner, we will perform it manually
       server.start();
-      String QUEUE_NAME = getName();
+      String QUEUE_NAME = "QUEUE_" + getName();
+      String TOPIC_NAME = "TOPIC_" + getName();
 
       ConnectionFactory cf = CFUtil.createConnectionFactory(protocol, 
"tcp://localhost:61616");
       try (Connection connection = cf.createConnection()) {
@@ -381,26 +382,38 @@ public class AutoCreateTest extends ActiveMQTestBase {
       try (Connection connection = cf.createConnection()) {
          Session session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
          Queue queue = session.createQueue(QUEUE_NAME);
-         MessageProducer producer = session.createProducer(queue);
-         producer.send(session.createTextMessage(randomString));
+         Topic topic = session.createTopic(TOPIC_NAME);
+         MessageProducer producer = session.createProducer(null);
+         producer.send(queue, session.createTextMessage(randomString));
+         producer.send(topic, session.createTextMessage(randomString));
       }
 
       info = 
server.getPostOffice().getAddressInfo(SimpleString.toSimpleString(QUEUE_NAME));
       Assert.assertNotNull(info);
       Assert.assertTrue(info.isAutoCreated());
 
+      info = 
server.getPostOffice().getAddressInfo(SimpleString.toSimpleString(TOPIC_NAME));
+      Assert.assertNotNull(info);
+      Assert.assertTrue(info.isAutoCreated());
+
       server.stop();
       try (AssertionLoggerHandler loggerHandler = new 
AssertionLoggerHandler()) {
          server.start();
 
-         Assert.assertFalse(loggerHandler.findText("AMQ224113")); // this time 
around the queue had messages, it has to exist
+         // this time around the address QUEUE_NAME had a queue with messages, 
it has to exist
+         Assert.assertFalse(loggerHandler.matchText("AMQ224113.*" + 
QUEUE_NAME));
          Assert.assertFalse(loggerHandler.findText("AMQ224112"));
+         // the address TOPIC_NAME had no queues, it has to be removed
+         Assert.assertTrue(loggerHandler.matchText("AMQ224113.*" + 
TOPIC_NAME));
       }
 
       info = 
server.getPostOffice().getAddressInfo(SimpleString.toSimpleString(QUEUE_NAME));
       Assert.assertNotNull(info);
       Assert.assertTrue(info.isAutoCreated());
 
+      info = 
server.getPostOffice().getAddressInfo(SimpleString.toSimpleString(TOPIC_NAME));
+      Assert.assertNull(info);
+
       { // just a namespace
          org.apache.activemq.artemis.core.server.Queue serverQueue = 
server.locateQueue(QUEUE_NAME);
          Wait.assertEquals(1, serverQueue::getMessageCount);

Reply via email to