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 5f028737ad ARTEMIS-3351 explicitly disconnect consumers when closing
session administratively
5f028737ad is described below
commit 5f028737ad49c833e6d95977a59bfb7990cd741a
Author: Justin Bertram <[email protected]>
AuthorDate: Mon Mar 17 11:15:23 2025 -0500
ARTEMIS-3351 explicitly disconnect consumers when closing session
administratively
---
.../core/management/impl/ActiveMQServerControlImpl.java | 7 +++++++
.../activemq/artemis/core/server/ActiveMQServerLogger.java | 3 +++
.../integration/management/ActiveMQServerControlTest.java | 12 ++++++++++++
3 files changed, 22 insertions(+)
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
index 1a42a3a0a6..0c9704d2cc 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
@@ -2437,6 +2437,13 @@ public class ActiveMQServerControlImpl extends
AbstractControl implements Active
List<ServerSession> sessions = server.getSessions(connectionID);
for (ServerSession session : sessions) {
if (session.getName().equals(ID)) {
+ for (ServerConsumer consumer : session.getServerConsumers())
{
+ try {
+ consumer.disconnect();
+ } catch (Exception e) {
+
ActiveMQServerLogger.LOGGER.unexpectedResultDisconnectingConsumer(consumer.getID(),
consumer.getSessionID(), e.getMessage());
+ }
+ }
session.close(true, force);
return true;
}
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
index b40fcbb95b..727494fa2d 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
@@ -1489,4 +1489,7 @@ public interface ActiveMQServerLogger {
@LogMessage(id = 224141, value = "Illegal implementation(s) of
java.security.Principal returned from LoginModule: {}", level =
LogMessage.Level.WARN)
void illegalPrincipal(String principals);
+
+ @LogMessage(id = 224142, value = "Unexpected result disconnecting consumer
{} while closing session {}: {}", level = LogMessage.Level.WARN)
+ void unexpectedResultDisconnectingConsumer(long consumerId, String
sessionId, String exceptionMessage);
}
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 138687b803..e361495505 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
@@ -54,6 +54,7 @@ import
org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
import org.apache.activemq.artemis.api.core.ActiveMQException;
import org.apache.activemq.artemis.api.core.ActiveMQIllegalStateException;
+import org.apache.activemq.artemis.api.core.ActiveMQObjectClosedException;
import org.apache.activemq.artemis.api.core.ActiveMQSecurityException;
import org.apache.activemq.artemis.api.core.ActiveMQTimeoutException;
import org.apache.activemq.artemis.api.core.JsonUtil;
@@ -138,6 +139,7 @@ import org.apache.activemq.artemis.utils.UUIDGenerator;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestTemplate;
+import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -5978,16 +5980,19 @@ public class ActiveMQServerControlTest extends
ManagementTestBase {
assertTrue(((org.apache.activemq.artemis.jms.client.ActiveMQMessageConsumer)JMSclient).isClosed());
}
+ @Timeout(30)
@TestTemplate
public void testForceCloseSession() throws Exception {
testForceCloseSession(false, false);
}
+ @Timeout(30)
@TestTemplate
public void testForceCloseSessionWithError() throws Exception {
testForceCloseSession(true, false);
}
+ @Timeout(30)
@TestTemplate
public void testForceCloseSessionWithPendingStoreOperation() throws
Exception {
testForceCloseSession(false, true);
@@ -6030,6 +6035,13 @@ public class ActiveMQServerControlTest extends
ManagementTestBase {
Wait.assertTrue(() -> serverSession.getServerConsumers().isEmpty(), 500);
Wait.assertTrue(() -> server.getSessions().isEmpty(), 500);
+
+ try {
+ clientConsumer.receive(100);
+ fail("Using the consumer should throw an exception here since its
session was closed administratively");
+ } catch (Exception e) {
+ assertTrue(e instanceof ActiveMQObjectClosedException);
+ }
}
@TestTemplate
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact