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 96e5c4dc37 ARTEMIS-5481 Close Requestor on doManagement operations
96e5c4dc37 is described below
commit 96e5c4dc3726dade32231ed3d34f74d96b4cfabf
Author: Clebert Suconic <[email protected]>
AuthorDate: Wed May 21 10:39:14 2025 -0400
ARTEMIS-5481 Close Requestor on doManagement operations
---
.../api/core/management/ManagementHelper.java | 23 +++++++++--------
.../api/core/management/SimpleManagement.java | 17 ++++++++++--
.../tests/leak/SimpleManagementLeakTest.java | 30 +++++++++++++---------
3 files changed, 45 insertions(+), 25 deletions(-)
diff --git
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ManagementHelper.java
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ManagementHelper.java
index bf633d2592..e4d9be8c25 100644
---
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ManagementHelper.java
+++
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ManagementHelper.java
@@ -117,20 +117,21 @@ public final class ManagementHelper {
*/
public static void doManagement(ClientSession session, MessageAcceptor
setup, MessageAcceptor ok, MessageAcceptor failed) throws Exception {
session.start();
- ClientRequestor requestor = new ClientRequestor(session,
"activemq.management");
- ClientMessage message = session.createMessage(false);
+ try (ClientRequestor requestor = new ClientRequestor(session,
"activemq.management")) {
+ ClientMessage message = session.createMessage(false);
- setup.accept(message);
+ setup.accept(message);
- ClientMessage reply = requestor.request(message);
+ ClientMessage reply = requestor.request(message);
- if (ManagementHelper.hasOperationSucceeded(reply)) {
- if (ok != null) {
- ok.accept(reply);
- }
- } else {
- if (failed != null) {
- failed.accept(reply);
+ if (ManagementHelper.hasOperationSucceeded(reply)) {
+ if (ok != null) {
+ ok.accept(reply);
+ }
+ } else {
+ if (failed != null) {
+ failed.accept(reply);
+ }
}
}
}
diff --git
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/SimpleManagement.java
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/SimpleManagement.java
index 570eb32f3b..65e066d8a6 100644
---
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/SimpleManagement.java
+++
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/SimpleManagement.java
@@ -72,14 +72,27 @@ public class SimpleManagement implements AutoCloseable {
return uri;
}
+ /**
+ * it will inject the session used by SimpleManagement.
+ * beware that if you call {@link #close()} the session passed here will be
closed as well. */
+ public void setSession(ClientSession session) {
+ this.session = session;
+ }
+
@Override
public void close() throws Exception {
if (session != null) {
session.close();
- sessionFactory.close();
- locator.close();
session = null;
+ }
+
+ if (sessionFactory != null) {
+ sessionFactory.close();
sessionFactory = null;
+ }
+
+ if (locator != null) {
+ locator.close();
locator = null;
}
}
diff --git
a/tests/leak-tests/src/test/java/org/apache/activemq/artemis/tests/leak/SimpleManagementLeakTest.java
b/tests/leak-tests/src/test/java/org/apache/activemq/artemis/tests/leak/SimpleManagementLeakTest.java
index 9b882986b4..8fd1dbc32d 100644
---
a/tests/leak-tests/src/test/java/org/apache/activemq/artemis/tests/leak/SimpleManagementLeakTest.java
+++
b/tests/leak-tests/src/test/java/org/apache/activemq/artemis/tests/leak/SimpleManagementLeakTest.java
@@ -18,7 +18,6 @@ package org.apache.activemq.artemis.tests.leak;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
-import javax.jms.MessageConsumer;
import javax.jms.Session;
import java.lang.invoke.MethodHandles;
@@ -28,6 +27,8 @@ import
org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImp
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl;
import org.apache.activemq.artemis.core.server.impl.QueueImpl;
+import org.apache.activemq.artemis.core.server.impl.ServerStatus;
+import org.apache.activemq.artemis.jms.client.ActiveMQSession;
import org.apache.activemq.artemis.tests.util.CFUtil;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
@@ -38,8 +39,6 @@ import org.slf4j.LoggerFactory;
import static
org.apache.activemq.artemis.tests.leak.MemoryAssertions.assertMemory;
import static
org.apache.activemq.artemis.tests.leak.MemoryAssertions.basicMemoryAsserts;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
public class SimpleManagementLeakTest extends AbstractLeakTest {
@@ -67,6 +66,8 @@ public class SimpleManagementLeakTest extends
AbstractLeakTest {
clearServers();
+ ServerStatus.clear();
+
assertMemory(checkLeak, 0, ActiveMQServerImpl.class.getName());
}
@@ -80,30 +81,35 @@ public class SimpleManagementLeakTest extends
AbstractLeakTest {
@Test
public void testSimpleManagement() throws Exception {
- internalTest();
+ internalTest(false);
+ basicMemoryAsserts();
+ }
+ @Test
+ public void testSimpleManagementInjectedSession() throws Exception {
+ internalTest(true);
basicMemoryAsserts();
}
// a method to isolate variables and let them go into GC
- private void internalTest() throws Exception {
+ private void internalTest(boolean injectSession) throws Exception {
CheckLeak checkLeak = new CheckLeak();
String queueName = "myQueue";
ConnectionFactory connectionFactory =
CFUtil.createConnectionFactory("core", "tcp://localhost:61616");
try (Connection connection = connectionFactory.createConnection()) {
- Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
- MessageConsumer consumer =
session.createConsumer(session.createQueue(queueName));
connection.start();
+ ActiveMQSession sessionForManagement = (ActiveMQSession)
connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
for (int i = 0; i < 10; i++) {
SimpleManagement simpleManagement = new
SimpleManagement("tcp://localhost:61616", null, null);
- assertEquals(0,
simpleManagement.getMessageCountOnQueue(queueName));
- assertEquals(1,
simpleManagement.getNumberOfConsumersOnQueue(queueName));
- simpleManagement.close();
+ if (injectSession) {
+
simpleManagement.setSession(sessionForManagement.getCoreSession());
+ }
+ simpleManagement.listNetworkTopology();
}
+ assertMemory(checkLeak, 5, QueueImpl.class.getName());
- int instancesOfQueues =
checkLeak.getAllObjects(QueueImpl.class).length;
- assertTrue(instancesOfQueues < 5, "There are " + instancesOfQueues +
" QueueImpl on the broker");
}
}
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact