You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2022/10/11 17:16:52 UTC

[activemq-artemis] branch main updated: ARTEMIS-4022 add auto-delete queue attribute to management

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

clebertsuconic 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 5343c97c7d ARTEMIS-4022 add auto-delete queue attribute to management
5343c97c7d is described below

commit 5343c97c7ded6fb4d88f22b88d0905aefba04718
Author: Justin Bertram <jb...@apache.org>
AuthorDate: Thu Sep 29 11:03:32 2022 -0500

    ARTEMIS-4022 add auto-delete queue attribute to management
---
 .../apache/activemq/artemis/logs/AuditLogger.java  |  7 ++++++
 .../artemis/api/core/management/QueueControl.java  |  6 +++++
 .../src/main/webapp/plugin/js/components/queues.js |  9 ++++---
 .../core/management/impl/QueueControlImpl.java     | 16 ++++++++++++
 .../core/management/impl/view/QueueField.java      |  3 ++-
 .../core/management/impl/view/QueueView.java       |  3 ++-
 .../management/ActiveMQServerControlTest.java      |  1 +
 .../integration/management/QueueControlTest.java   | 29 ++++++++++++++++++++++
 .../management/QueueControlUsingCoreTest.java      |  5 ++++
 9 files changed, 74 insertions(+), 5 deletions(-)

diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
index a48aee2500..961cb1c8f8 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java
@@ -2632,4 +2632,11 @@ public interface AuditLogger {
 
    @LogMessage(id = 601765, value = "User {} is getting status on target resource: {}", level = LogMessage.Level.INFO)
    void getStatus(String user, Object source);
+
+   static void isAutoDelete(Object source) {
+      BASE_LOGGER.isAutoDelete(getCaller(), source);
+   }
+
+   @LogMessage(id = 601766, value = "User {} is getting auto-delete property on target resource: {}", level = LogMessage.Level.INFO)
+   void isAutoDelete(String user, Object source);
 }
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 98548438c1..eecbcd904c 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
@@ -782,4 +782,10 @@ public interface QueueControl {
     */
    @Operation(desc = "Immediately deliver the scheduled message with the specified message ID", impact = MBeanOperationInfo.ACTION)
    void deliverScheduledMessage(@Parameter(name = "messageID", desc = "ID of the message to deliver") long messageId) throws Exception;
+
+   /**
+    * Returns whether this queue is available for auto deletion.
+    */
+   @Attribute(desc = "whether this queue is available for auto deletion")
+   boolean isAutoDelete();
 }
diff --git a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/queues.js b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/queues.js
index 0b7a73f1ee..72570de551 100644
--- a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/queues.js
+++ b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/queues.js
@@ -103,7 +103,8 @@ var Artemis;
                   {name: "Queue Enabled", visible: false},
                   {name: "Ring Size", visible: false},
                   {name: "Consumers Before Dispatch", visible: false},
-                  {name: "Delay Before Dispatch", visible: false}
+                  {name: "Delay Before Dispatch", visible: false},
+                  {name: "Auto Delete", visible: false}
              ]
         };
 
@@ -140,7 +141,8 @@ var Artemis;
                 {id: 'deliveringCount', name: 'Delivering Count'},
                 {id: 'paused', name: 'Paused'},
                 {id: 'temporary', name: 'Temporary'},
-                {id: 'autoCreated', name: 'Auto Created'}
+                {id: 'autoCreated', name: 'Auto Created'},
+                {id: 'autoDelete', name: 'Auto Delete'}
             ],
             operationOptions: [
                 {id: 'EQUALS', name: 'Equals'},
@@ -215,7 +217,8 @@ var Artemis;
             { header: 'Enabled', itemField: 'enabled'},
             { header: 'Ring Size', itemField: 'ringSize'},
             { header: 'Consumers Before Dispatch', itemField: 'consumersBeforeDispatch'},
-            { header: 'Delay Before Dispatch', itemField: 'delayBeforeDispatch'}
+            { header: 'Delay Before Dispatch', itemField: 'delayBeforeDispatch'},
+            { header: 'Auto Delete', itemField: 'autoDelete'}
         ];
 
         ctrl.refresh = function () {
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 c78111ba57..1ffe4bcfd2 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
@@ -1994,6 +1994,22 @@ public class QueueControlImpl extends AbstractControl implements QueueControl {
       }
    }
 
+   @Override
+   public boolean isAutoDelete() {
+
+      if (AuditLogger.isBaseLoggingEnabled()) {
+         AuditLogger.isAutoDelete(queue);
+      }
+      checkStarted();
+
+      clearIO();
+      try {
+         return queue.isAutoDelete();
+      } finally {
+         blockOnIO();
+      }
+   }
+
    private void checkStarted() {
       if (!server.getPostOffice().isStarted()) {
          throw new IllegalStateException("Broker is not started. Queue can not be managed yet");
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueField.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueField.java
index 6bd4333ae8..12105c4e0f 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueField.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueField.java
@@ -52,7 +52,8 @@ public enum QueueField {
    ENABLED("enabled"),
    RING_SIZE("ringSize"),
    CONSUMERS_BEFORE_DISPATCH("consumersBeforeDispatch"),
-   DELAY_BEFORE_DISPATCH("delayBeforeDispatch");
+   DELAY_BEFORE_DISPATCH("delayBeforeDispatch"),
+   AUTO_DELETE("autoDelete");
 
    private static final Map<String, QueueField> lookup = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
 
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
index cf5f303b55..e346e71b73 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
@@ -76,7 +76,8 @@ public class QueueView extends ActiveMQAbstractView<QueueControl> {
          .add(QueueField.ENABLED.getName(), toString(queue.isEnabled()))
          .add(QueueField.RING_SIZE.getName(), toString(queue.getRingSize()))
          .add(QueueField.CONSUMERS_BEFORE_DISPATCH.getName(), toString(queue.getConsumersBeforeDispatch()))
-         .add(QueueField.DELAY_BEFORE_DISPATCH.getName(), toString(queue.getDelayBeforeDispatch()));
+         .add(QueueField.DELAY_BEFORE_DISPATCH.getName(), toString(queue.getDelayBeforeDispatch()))
+         .add(QueueField.AUTO_DELETE.getName(), toString(q.isAutoDelete()));
       return obj;
    }
 
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
index 62e888e7df..9f065ea1c9 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
@@ -3008,6 +3008,7 @@ public class ActiveMQServerControlTest extends ManagementTestBase {
       Assert.assertEquals("groupRebalance", "false", array.getJsonObject(0).getString("groupRebalance"));
       Assert.assertEquals("groupBuckets", "-1", array.getJsonObject(0).getString("groupBuckets"));
       Assert.assertEquals("groupFirstKey", "", array.getJsonObject(0).getString("groupFirstKey"));
+      Assert.assertEquals("autoDelete", "false", array.getJsonObject(0).getString("autoDelete"));
    }
 
    @Test
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 b502a708aa..123a143a13 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
@@ -268,6 +268,35 @@ public class QueueControlTest extends ManagementTestBase {
       session.deleteQueue(queue);
    }
 
+   @Test
+   public void testAutoDeleteAttribute() throws Exception {
+      SimpleString address = RandomUtil.randomSimpleString();
+      SimpleString queue = RandomUtil.randomSimpleString();
+
+      session.createQueue(new QueueConfiguration(queue).setAddress(address));
+
+      QueueControl queueControl = createManagementControl(address, queue);
+      Assert.assertFalse(queueControl.isAutoDelete());
+
+      session.deleteQueue(queue);
+
+      session.createQueue(new QueueConfiguration(queue).setAddress(address).setAutoDelete(true));
+
+      queueControl = createManagementControl(address, queue);
+      Assert.assertTrue(queueControl.isAutoDelete());
+
+      session.deleteQueue(queue);
+
+      server.getAddressSettingsRepository().addMatch(address.toString(), new AddressSettings().setAutoDeleteQueues(true));
+
+      session.createQueue(new QueueConfiguration(queue).setAddress(address).setAutoCreated(true));
+
+      queueControl = createManagementControl(address, queue);
+      Assert.assertTrue(queueControl.isAutoDelete());
+
+      session.deleteQueue(queue);
+   }
+
    @Test
    public void testGroupAttributes() 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 a75a8e0764..6bbcb160b8 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
@@ -76,6 +76,11 @@ public class QueueControlUsingCoreTest extends QueueControlTest {
             }
          }
 
+         @Override
+         public boolean isAutoDelete() {
+            return (Boolean) proxy.retrieveAttributeValue("autoDelete");
+         }
+
          @Override
          public void resetAllGroups() {
             try {