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

tabish 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 d2791b5368 ARTEMIS-5207 expose persisted status of queue's paused 
attribute
d2791b5368 is described below

commit d2791b5368a67c1d6cebb5f52d3c9affc333f86c
Author: Justin Bertram <[email protected]>
AuthorDate: Mon Mar 17 14:55:23 2025 -0500

    ARTEMIS-5207 expose persisted status of queue's paused attribute
---
 .../apache/activemq/artemis/logs/AuditLogger.java  |  5 ++
 .../artemis/api/core/management/QueueControl.java  |  8 ++-
 .../core/management/impl/QueueControlImpl.java     | 17 ++++++-
 .../core/management/impl/view/QueueField.java      |  1 +
 .../core/management/impl/view/QueueView.java       |  6 ++-
 .../integration/management/QueueControlTest.java   | 58 ++++++++++++++++------
 .../management/QueueControlUsingCoreTest.java      |  9 +++-
 7 files changed, 82 insertions(+), 22 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 dbb34f7349..65f56d9d1f 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
@@ -2874,5 +2874,10 @@ public interface AuditLogger {
    @LogMessage(id = 601799, value = "User {} is getting PendingMirrorAcks on 
target resource: {}", level = LogMessage.Level.INFO)
    void getPendingMirrorAcks(String user, Object source);
 
+   static void isPersistedPause(Object source) {
+      BASE_LOGGER.isPaused(getCaller(), source);
+   }
 
+   @LogMessage(id = 601800, value = "User {} is getting persisted pause 
property on target resource: {}", level = LogMessage.Level.INFO)
+   void isPersistedPause(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 c3cc843a8f..3aa4850058 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
@@ -643,7 +643,13 @@ public interface QueueControl {
     * {@return whether the queue is paused}
     */
    @Attribute(desc = "whether the queue is paused")
-   boolean isPaused() throws Exception;
+   boolean isPaused();
+
+   /**
+    * {@return whether the queue's paused status is persisted}
+    */
+   @Attribute(desc = "whether the queue's paused status is persisted")
+   boolean isPersistedPause();
 
    @Operation(desc = "Browse Messages", impact = MBeanOperationInfo.ACTION)
    CompositeData[] browse() throws Exception;
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 a0f8fed8ab..e5d42f01f3 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
@@ -1708,7 +1708,7 @@ public class QueueControlImpl extends AbstractControl 
implements QueueControl {
    }
 
    @Override
-   public boolean isPaused() throws Exception {
+   public boolean isPaused() {
       if (AuditLogger.isBaseLoggingEnabled()) {
          AuditLogger.isPaused(queue);
       }
@@ -1722,6 +1722,21 @@ public class QueueControlImpl extends AbstractControl 
implements QueueControl {
       }
    }
 
+   @Override
+   public boolean isPersistedPause() {
+      if (AuditLogger.isBaseLoggingEnabled()) {
+         AuditLogger.isPersistedPause(queue);
+      }
+      checkStarted();
+
+      clearIO();
+      try {
+         return queue.isPersistedPause();
+      } finally {
+         blockOnIO();
+      }
+   }
+
    @Override
    public CompositeData[] browse(int page, int pageSize) throws Exception {
       return browse(page, pageSize, null);
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 d48533ff9f..78ffdb3bb8 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
@@ -37,6 +37,7 @@ public enum QueueField {
    AUTO_CREATED("autoCreated"),
    DURABLE("durable"),
    PAUSED("paused"),
+   PERSISTEDPAUSE("persistedPause"),
    TEMPORARY("temporary"),
    PURGE_ON_NO_CONSUMERS("purgeOnNoConsumers"),
    MESSAGES_KILLED("messagesKilled"),
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 2d1e21bf3c..80e20014f5 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
@@ -50,7 +50,8 @@ public class QueueView extends 
ActiveMQAbstractView<QueueControl> {
          .add(QueueField.ADDRESS.getName(), toString(queue.getAddress()))
          .add(QueueField.FILTER.getName(), toString(queue.getFilter()))
          .add(QueueField.DURABLE.getName(), toString(queue.isDurable()))
-         .add(QueueField.PAUSED.getName(), toString(q.isPaused()))
+         .add(QueueField.PAUSED.getName(), toString(queue.isPaused()))
+         .add(QueueField.PERSISTEDPAUSE.getName(), 
toString(queue.isPersistedPause()))
          .add(QueueField.TEMPORARY.getName(), toString(queue.isTemporary()))
          .add(QueueField.PURGE_ON_NO_CONSUMERS.getName(), 
toString(queue.isPurgeOnNoConsumers()))
          .add(QueueField.CONSUMER_COUNT.getName(), 
toString(queue.getConsumerCount()))
@@ -94,7 +95,8 @@ public class QueueView extends 
ActiveMQAbstractView<QueueControl> {
          case ADDRESS -> queue.getAddress();
          case FILTER -> queue.getFilter();
          case DURABLE -> queue.isDurable();
-         case PAUSED -> q.isPaused();
+         case PAUSED -> queue.isPaused();
+         case PERSISTEDPAUSE -> queue.isPersistedPause();
          case TEMPORARY -> queue.isTemporary();
          case PURGE_ON_NO_CONSUMERS -> queue.isPurgeOnNoConsumers();
          case CONSUMER_COUNT -> queue.getConsumerCount();
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 b3122b9369..149fd6e27c 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
@@ -4206,26 +4206,52 @@ public class QueueControlTest extends 
ManagementTestBase {
    }
 
    @TestTemplate
-   public void testPauseAndResume() {
+   public void testPauseAndResume() throws Exception {
       long counterPeriod = 1000;
       SimpleString address = RandomUtil.randomUUIDSimpleString();
       SimpleString queue = RandomUtil.randomUUIDSimpleString();
 
-      try {
-         
session.createQueue(QueueConfiguration.of(queue).setAddress(address).setDurable(durable));
-         QueueControl queueControl = createManagementControl(address, queue);
-
-         ActiveMQServerControl serverControl = 
ManagementControlHelper.createActiveMQServerControl(mbeanServer);
-         serverControl.enableMessageCounters();
-         serverControl.setMessageCounterSamplePeriod(counterPeriod);
-         assertFalse(queueControl.isPaused());
-         queueControl.pause();
-         assertTrue(queueControl.isPaused());
-         queueControl.resume();
-         assertFalse(queueControl.isPaused());
-      } catch (Exception e) {
-         e.printStackTrace();
-      }
+      
session.createQueue(QueueConfiguration.of(queue).setAddress(address).setDurable(durable));
+      QueueControl queueControl = createManagementControl(address, queue);
+
+      ActiveMQServerControl serverControl = 
ManagementControlHelper.createActiveMQServerControl(mbeanServer);
+      serverControl.enableMessageCounters();
+      serverControl.setMessageCounterSamplePeriod(counterPeriod);
+      assertFalse(queueControl.isPaused());
+      assertFalse(queueControl.isPersistedPause());
+      queueControl.pause();
+      assertTrue(queueControl.isPaused());
+      assertFalse(queueControl.isPersistedPause());
+      queueControl.resume();
+      assertFalse(queueControl.isPaused());
+      assertFalse(queueControl.isPersistedPause());
+   }
+
+   @TestTemplate
+   public void testPersistedPauseAndResume() throws Exception {
+      assumeTrue(durable);
+      long counterPeriod = 1000;
+      SimpleString address = RandomUtil.randomUUIDSimpleString();
+      SimpleString queue = RandomUtil.randomUUIDSimpleString();
+
+      
session.createQueue(QueueConfiguration.of(queue).setAddress(address).setDurable(durable));
+      QueueControl queueControl = createManagementControl(address, queue);
+
+      ActiveMQServerControl serverControl = 
ManagementControlHelper.createActiveMQServerControl(mbeanServer);
+      serverControl.enableMessageCounters();
+      serverControl.setMessageCounterSamplePeriod(counterPeriod);
+      assertFalse(queueControl.isPaused());
+      queueControl.pause(true);
+      assertTrue(queueControl.isPaused());
+      assertTrue(queueControl.isPersistedPause());
+      server.stop();
+      server.start();
+      queueControl = createManagementControl(address, queue);
+      assertTrue(queueControl.isPaused());
+      assertTrue(queueControl.isPersistedPause());
+      queueControl.resume();
+      assertFalse(queueControl.isPaused());
+      assertFalse(queueControl.isPersistedPause());
    }
 
    @TestTemplate
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 e3947fad2c..5cea1efd54 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
@@ -605,8 +605,13 @@ public class QueueControlUsingCoreTest extends 
QueueControlTest {
          }
 
          @Override
-         public boolean isPaused() throws Exception {
-            return (Boolean) proxy.invokeOperation("isPaused");
+         public boolean isPaused() {
+            return (Boolean) proxy.retrieveAttributeValue("paused");
+         }
+
+         @Override
+         public boolean isPersistedPause() {
+            return (Boolean) proxy.retrieveAttributeValue("persistedPause");
          }
 
          @Override


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to