From 838cca49ea739172f7f0a229a5f2b643a9e8f30c Mon Sep 17 00:00:00 2001 From: Clebert Suconic Date: Fri, 15 Jun 2018 10:32:39 -0400 Subject: [PATCH] ARTEMIS-1935: Close of openwire connection should closes all open sessions This is my ammending to the last commit I'm adding some extra verifications to the test and I fixed a leak that already existed on the previous map (cherry picked from commit b360fa6063b4060ad91a478d3b46dba557d9a72b) --- .../protocol/openwire/OpenWireConnection.java | 1 + .../openwire/SessionHandlingOpenWireTest.java | 22 ++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java index bafce92cb9b..b5adf346ff1 100644 --- a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java +++ b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java @@ -1013,6 +1013,7 @@ public AMQSession addSession(SessionInfo ss, boolean internal) { public void removeSession(AMQConnectionContext context, SessionInfo info) throws Exception { AMQSession session = sessions.remove(info.getSessionId()); if (session != null) { + sessionIdMap.remove(session.getCoreSession().getName()); session.close(); } } diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/SessionHandlingOpenWireTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/SessionHandlingOpenWireTest.java index 989b62d5f04..c43d5f7cd29 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/SessionHandlingOpenWireTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/SessionHandlingOpenWireTest.java @@ -61,12 +61,22 @@ public void testInternalSessionHandling() throws Exception { public void testInternalSessionHandlingNoSessionClose() throws Exception { try (Connection conn = factory.createConnection()) { conn.start(); - Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); - Destination dest = createDestination(session,ActiveMQDestination.QUEUE_TYPE); - sendMessages(session, dest, 1); - MessageConsumer consumer = session.createConsumer(dest); - Message m = consumer.receive(2000); - assertNotNull(m); + for (int i = 0; i < 100; i++) { + Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); + Destination dest = createDestination(session,ActiveMQDestination.QUEUE_TYPE); + sendMessages(session, dest, 1); + MessageConsumer consumer = session.createConsumer(dest); + Message m = consumer.receive(2000); + consumer.close(); + assertNotNull(m); + + if (i % 2 == 1) { + // it will close only half of the sessions + // just to introduce error conditions + session.close(); + } + + } } assertFalse(AssertionLoggerHandler.findText("Client connection failed, clearing up resources for session")); assertFalse(AssertionLoggerHandler.findText("Cleared up resources for session"));