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]