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/artemis.git


The following commit(s) were added to refs/heads/main by this push:
     new 64f5cde0be ARTEMIS-5786 determine if address is blocked via mngmnt API
64f5cde0be is described below

commit 64f5cde0be266a7b1e4b1ea400cc72e23ba0843d
Author: Justin Bertram <[email protected]>
AuthorDate: Tue Dec 9 12:36:57 2025 -0600

    ARTEMIS-5786 determine if address is blocked via mngmnt API
---
 .../apache/activemq/artemis/logs/AuditLogger.java    |  7 +++++++
 .../artemis/api/core/management/AddressControl.java  |  6 ++++++
 .../core/management/impl/AddressControlImpl.java     | 20 ++++++++++++++++++++
 .../activemq/artemis/core/paging/PagingStore.java    |  2 ++
 .../artemis/core/paging/impl/PagingStoreImpl.java    | 19 ++++++++++++-------
 .../integration/management/AddressControlTest.java   | 18 ++++++++++++++++++
 .../management/AddressControlUsingCoreTest.java      |  7 ++++++-
 .../performance/storage/PersistMultiThreadTest.java  |  5 +++++
 8 files changed, 76 insertions(+), 8 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 4ff50500c6..41c8e9e48a 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
@@ -2896,4 +2896,11 @@ public interface AuditLogger {
    @LogMessage(id = 601802, value = "User {} is retry sending messages on 
target resource: {} {}", level = LogMessage.Level.INFO)
    void retryMessages(String user, Object source, String args);
 
+   static void isBlockedViaManagement(Object source) {
+      BASE_LOGGER.isBlockedViaManagement(getCaller(), source);
+   }
+
+   @LogMessage(id = 601803, value = "User {} is getting BlockedViaManagement 
on target resource: {}", level = LogMessage.Level.INFO)
+   void isBlockedViaManagement(String user, Object source);
+
 }
diff --git 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/AddressControl.java
 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/AddressControl.java
index e82e5412f5..5f0a747376 100644
--- 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/AddressControl.java
+++ 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/AddressControl.java
@@ -155,6 +155,12 @@ public interface AddressControl {
    @Operation(desc = "Resumes message production to this address, if 
previously blocked.", impact = MBeanOperationInfo.ACTION)
    void unblock() throws Exception;
 
+   /**
+    * {@return whether message production to this address is blocked via 
management (via the {@code block} operation)}
+    */
+   @Attribute(desc = "whether message production to this address is blocked 
via management (via the block operation)")
+   boolean isBlockedViaManagement() throws Exception;
+
    /**
     * {@return the number of bytes used by each page for this address}
     */
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AddressControlImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AddressControlImpl.java
index 4a8ade272d..4e5e9e5714 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AddressControlImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AddressControlImpl.java
@@ -481,6 +481,26 @@ public class AddressControlImpl extends AbstractControl 
implements AddressContro
       }
    }
 
+   @Override
+   public boolean isBlockedViaManagement() throws Exception {
+      if (AuditLogger.isBaseLoggingEnabled()) {
+         AuditLogger.isBlockedViaManagement(this.addressInfo);
+      }
+      clearIO();
+      try {
+         final PagingStore pagingStore = getPagingStore();
+         if (pagingStore != null) {
+            return pagingStore.isBlockedViaManagement();
+         } else {
+            return false;
+         }
+      } catch (Exception e) {
+         return false;
+      } finally {
+         blockOnIO();
+      }
+   }
+
    @Override
    public long getNumberOfPages() {
       if (AuditLogger.isBaseLoggingEnabled()) {
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/PagingStore.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/PagingStore.java
index ba1b50ef26..54a51dbc2f 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/PagingStore.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/PagingStore.java
@@ -284,6 +284,8 @@ public interface PagingStore extends ActiveMQComponent, 
RefCountMessageListener
 
    void unblock();
 
+   boolean isBlockedViaManagement();
+
    default boolean hasPendingIO() {
       return false;
    }
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreImpl.java
index 33b0bfe891..a9dcb7d8ca 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreImpl.java
@@ -170,7 +170,7 @@ public class PagingStoreImpl implements PagingStore {
 
    private volatile boolean blocking = false;
 
-   private volatile boolean blockedViaAddressControl = false;
+   private volatile boolean blockedViaManagement = false;
 
    private long rejectThreshold;
 
@@ -1290,7 +1290,7 @@ public class PagingStoreImpl implements PagingStore {
    public boolean checkMemory(boolean runOnFailure, Runnable 
runWhenAvailableParameter, Runnable runWhenBlocking, Consumer<AtomicRunnable> 
blockedCallback) {
       AtomicRunnable runWhenAvailable = 
AtomicRunnable.checkAtomic(runWhenAvailableParameter);
 
-      if (blockedViaAddressControl) {
+      if (blockedViaManagement) {
          if (runWhenAvailable != null) {
             addToBlockList(runWhenAvailable, blockedCallback);
          }
@@ -1404,7 +1404,7 @@ public class PagingStoreImpl implements PagingStore {
 
    @Override
    public boolean checkReleasedMemory() {
-      if (!blockedViaAddressControl && !pagingManager.isGlobalFull() && !full) 
{
+      if (!blockedViaManagement && !pagingManager.isGlobalFull() && !full) {
          executor.execute(this::memoryReleased);
          if (blocking) {
             ActiveMQServerLogger.LOGGER.unblockingMessageProduction(address, 
getPageInfo());
@@ -1876,21 +1876,26 @@ public class PagingStoreImpl implements PagingStore {
 
    @Override
    public void block() {
-      if (!blockedViaAddressControl) {
+      if (!blockedViaManagement) {
          ActiveMQServerLogger.LOGGER.blockingViaControl(address);
       }
-      blockedViaAddressControl = true;
+      blockedViaManagement = true;
    }
 
    @Override
    public void unblock() {
-      if (blockedViaAddressControl) {
+      if (blockedViaManagement) {
          ActiveMQServerLogger.LOGGER.unblockingViaControl(address);
       }
-      blockedViaAddressControl = false;
+      blockedViaManagement = false;
       checkReleasedMemory();
    }
 
+   @Override
+   public boolean isBlockedViaManagement() {
+      return blockedViaManagement;
+   }
+
    @Override
    public boolean isRejectingMessages() {
       if (addressFullMessagePolicy != AddressFullMessagePolicy.BLOCK) {
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AddressControlTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AddressControlTest.java
index 32ced25415..1f945d0a8e 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AddressControlTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AddressControlTest.java
@@ -880,6 +880,24 @@ public class AddressControlTest extends ManagementTestBase 
{
       assertEquals(exactPercentBeforeRestart, 
addressControl.getAddressLimitPercent());
    }
 
+   @Test
+   public void testIsBlockedViaManagement() throws Exception {
+      SimpleString address = RandomUtil.randomUUIDSimpleString();
+      SimpleString queue = RandomUtil.randomUUIDSimpleString();
+
+      
session.createQueue(QueueConfiguration.of(queue).setAddress(address).setDurable(false));
+
+      AddressControl addressControl = createManagementControl(address);
+
+      assertFalse(addressControl.isBlockedViaManagement());
+      addressControl.block();
+      assertTrue(addressControl.isBlockedViaManagement());
+      addressControl.unblock();
+      assertFalse(addressControl.isBlockedViaManagement());
+
+      session.deleteQueue(queue);
+   }
+
 
    @Override
    @BeforeEach
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AddressControlUsingCoreTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AddressControlUsingCoreTest.java
index a0804fc2ae..92ba0632d4 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AddressControlUsingCoreTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/AddressControlUsingCoreTest.java
@@ -128,7 +128,12 @@ public class AddressControlUsingCoreTest extends 
AddressControlTest {
 
          @Override
          public void unblock() throws Exception {
-            proxy.invokeOperation("unBlock");
+            proxy.invokeOperation("unblock");
+         }
+
+         @Override
+         public boolean isBlockedViaManagement() throws Exception {
+            return (boolean) 
proxy.retrieveAttributeValue("blockedViaManagement");
          }
 
          @Override
diff --git 
a/tests/performance-tests/src/test/java/org/apache/activemq/artemis/tests/performance/storage/PersistMultiThreadTest.java
 
b/tests/performance-tests/src/test/java/org/apache/activemq/artemis/tests/performance/storage/PersistMultiThreadTest.java
index c3777bb8b0..29a8ff9671 100644
--- 
a/tests/performance-tests/src/test/java/org/apache/activemq/artemis/tests/performance/storage/PersistMultiThreadTest.java
+++ 
b/tests/performance-tests/src/test/java/org/apache/activemq/artemis/tests/performance/storage/PersistMultiThreadTest.java
@@ -614,5 +614,10 @@ public class PersistMultiThreadTest extends 
ActiveMQTestBase {
       @Override
       public void unblock() {
       }
+
+      @Override
+      public boolean isBlockedViaManagement() {
+         return false;
+      }
    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to