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


Reply via email to