You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2020/03/06 02:36:43 UTC
[activemq-artemis] branch master updated: ARTEMIS-2631 address
orphaned from JMS temp queue
This is an automated email from the ASF dual-hosted git repository.
clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/master by this push:
new 339cccc ARTEMIS-2631 address orphaned from JMS temp queue
new e899fac This closes #2993
339cccc is described below
commit 339ccccbd71026a0be007526b5d551e1b9e31255
Author: Justin Bertram <jb...@apache.org>
AuthorDate: Mon Feb 24 12:37:26 2020 -0600
ARTEMIS-2631 address orphaned from JMS temp queue
---
.../core/postoffice/impl/SimpleAddressManager.java | 2 +-
.../core/server/impl/ActiveMQServerImpl.java | 7 +++--
.../artemis/core/server/impl/AddressInfo.java | 11 +++++++
.../jms/client/TemporaryDestinationTest.java | 36 ++++++++++++++++++++++
4 files changed, 52 insertions(+), 4 deletions(-)
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
index 24904e2..206891e 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
@@ -269,7 +269,7 @@ public class SimpleAddressManager implements AddressManager {
@Override
public boolean addAddressInfo(AddressInfo addressInfo) throws Exception {
boolean added = reloadAddressInfo(addressInfo);
- if (added && storageManager != null) {
+ if (!addressInfo.isTemporary() && added && storageManager != null) {
long txID = storageManager.generateID();
try {
storageManager.addAddressBinding(txID, addressInfo);
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
index 4cea428..f7a6fc9 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
@@ -3382,9 +3382,10 @@ public class ActiveMQServerImpl implements ActiveMQServer {
RoutingType rt = (routingType == null ? ActiveMQDefaultConfiguration.getDefaultRoutingType() : routingType);
if (autoCreateAddress || temporary) {
if (info == null) {
- final AddressInfo addressInfo = new AddressInfo(addressToUse, rt);
- addressInfo.setAutoCreated(true);
- addressInfo.setInternal(addrInfo == null ? false : addrInfo.isInternal());
+ final AddressInfo addressInfo = new AddressInfo(addressToUse, rt)
+ .setAutoCreated(true)
+ .setTemporary(temporary)
+ .setInternal(addrInfo == null ? false : addrInfo.isInternal());
addAddressInfo(addressInfo);
} else if (!info.getRoutingTypes().contains(rt)) {
EnumSet<RoutingType> routingTypes = EnumSet.copyOf(info.getRoutingTypes());
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/AddressInfo.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/AddressInfo.java
index 81eefdb..b3ec9cb 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/AddressInfo.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/AddressInfo.java
@@ -46,6 +46,8 @@ public class AddressInfo {
private boolean autoCreated = false;
+ private volatile boolean temporary = false;
+
private static final EnumSet<RoutingType> EMPTY_ROUTING_TYPES = EnumSet.noneOf(RoutingType.class);
private EnumSet<RoutingType> routingTypes;
private RoutingType firstSeen;
@@ -101,6 +103,15 @@ public class AddressInfo {
return this;
}
+ public boolean isTemporary() {
+ return temporary;
+ }
+
+ public AddressInfo setTemporary(boolean temporary) {
+ this.temporary = temporary;
+ return this;
+ }
+
public SimpleString getName() {
return name;
}
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/TemporaryDestinationTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/TemporaryDestinationTest.java
index 850359a..030abfe 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/TemporaryDestinationTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/TemporaryDestinationTest.java
@@ -47,6 +47,11 @@ public class TemporaryDestinationTest extends JMSTestBase {
super.setUp();
}
+ @Override
+ protected boolean usePersistence() {
+ return true;
+ }
+
@Test
public void testTemporaryQueueLeak() throws Exception {
ActiveMQConnection conn = null;
@@ -214,6 +219,37 @@ public class TemporaryDestinationTest extends JMSTestBase {
}
@Test
+ public void testTemporaryResourcesDeletedAfterServerRestart() throws Exception {
+ server.getAddressSettingsRepository().addMatch("#", new AddressSettings().setAutoCreateAddresses(false).setAutoCreateQueues(false));
+
+ Connection conn = null;
+
+ try {
+ conn = createConnection();
+
+ Session producerSession = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ TemporaryQueue tempQueue = producerSession.createTemporaryQueue();
+
+ assertNotNull(server.getAddressInfo(SimpleString.toSimpleString(tempQueue.getQueueName())));
+
+ server.stop();
+
+ conn.close();
+
+ server.start();
+
+ waitForServerToStart(server);
+
+ assertNull(server.getAddressInfo(SimpleString.toSimpleString(tempQueue.getQueueName())));
+ } finally {
+ if (conn != null) {
+ conn.close();
+ }
+ }
+ }
+
+ @Test
public void testForTempQueueCleanerUpperLeak() throws Exception {
try {
conn = createConnection();