From 3b82cad0245b03e773d5de9c253feb66b0be2238 Mon Sep 17 00:00:00 2001 From: Justin Bertram Date: Thu, 20 Jun 2019 13:39:45 -0500 Subject: [PATCH 1/2] ARTEMIS-2391 static address may be auto-deleted --- .../core/postoffice/impl/PostOfficeImpl.java | 6 +-- .../server/AddressQueueDeleteDelayTest.java | 50 +++++++++++++++++++ 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java index 1bcff225fe..c7559be9d3 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java @@ -1512,7 +1512,7 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding return true; } - /** + /** * The expiry scanner can't be started until the whole server has been started other wise you may get races */ @Override @@ -1601,10 +1601,10 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding AddressSettings settings = addressSettingsRepository.getMatch(address.toString()); try { - if (addressInfo != null && !isAddressBound(address) && addressInfo.getBindingRemovedTimestamp() != -1 && (System.currentTimeMillis() - addressInfo.getBindingRemovedTimestamp() >= settings.getAutoDeleteAddressesDelay())) { + if (settings.isAutoDeleteAddresses() && addressInfo != null && addressInfo.isAutoCreated() && !isAddressBound(address) && addressInfo.getBindingRemovedTimestamp() != -1 && (System.currentTimeMillis() - addressInfo.getBindingRemovedTimestamp() >= settings.getAutoDeleteAddressesDelay())) { if (ActiveMQServerLogger.LOGGER.isDebugEnabled()) { - ActiveMQServerLogger.LOGGER.info("deleting auto-created address \"" + address + ".\""); + ActiveMQServerLogger.LOGGER.debug("deleting auto-created address \"" + address + ".\""); } server.removeAddressInfo(address, null); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/AddressQueueDeleteDelayTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/AddressQueueDeleteDelayTest.java index 27ee6eb391..0932482368 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/AddressQueueDeleteDelayTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/AddressQueueDeleteDelayTest.java @@ -163,6 +163,56 @@ public class AddressQueueDeleteDelayTest extends ActiveMQTestBase { assertTrue(Wait.waitFor(() -> server.getAddressInfo(address) == null, DURATION_MILLIS, SLEEP_MILLIS)); } + @Test + public void testAddressDeleteDelay() throws Exception { + SimpleString address = RandomUtil.randomSimpleString(); + SimpleString queue = RandomUtil.randomSimpleString(); + final long deleteAddressesDelay = 500; + + AddressSettings addressSettings = new AddressSettings().setAutoDeleteAddressesDelay(deleteAddressesDelay); + server.getAddressSettingsRepository().addMatch(address.toString(), addressSettings); + + session.createAddress(address, RoutingType.MULTICAST, true); + session.createQueue(address, RoutingType.MULTICAST, queue); + session.deleteQueue(queue); + + assertTrue(Wait.waitFor(() -> server.getAddressInfo(address) == null, DURATION_MILLIS, SLEEP_MILLIS)); + } + + @Test + public void testAddressDeleteDelayNegative() throws Exception { + SimpleString address = RandomUtil.randomSimpleString(); + SimpleString queue = RandomUtil.randomSimpleString(); + final long deleteAddressesDelay = 500; + + AddressSettings addressSettings = new AddressSettings().setAutoDeleteAddressesDelay(deleteAddressesDelay); + server.getAddressSettingsRepository().addMatch(address.toString(), addressSettings); + + // the address should not be deleted since it is not auto-created + session.createAddress(address, RoutingType.MULTICAST, false); + session.createQueue(address, RoutingType.MULTICAST, queue); + session.deleteQueue(queue); + + assertFalse(Wait.waitFor(() -> server.getAddressInfo(address) == null, DURATION_MILLIS, SLEEP_MILLIS)); + } + + @Test + public void testAddressDeleteDelayNegative2() throws Exception { + SimpleString address = RandomUtil.randomSimpleString(); + SimpleString queue = RandomUtil.randomSimpleString(); + final long deleteAddressesDelay = 500; + + // the address should not be deleted since autoDeleteAddresses = false + AddressSettings addressSettings = new AddressSettings().setAutoDeleteAddressesDelay(deleteAddressesDelay).setAutoDeleteAddresses(false); + server.getAddressSettingsRepository().addMatch(address.toString(), addressSettings); + + session.createAddress(address, RoutingType.MULTICAST, true); + session.createQueue(address, RoutingType.MULTICAST, queue); + session.deleteQueue(queue); + + assertFalse(Wait.waitFor(() -> server.getAddressInfo(address) == null, DURATION_MILLIS, SLEEP_MILLIS)); + } + @Override @Before public void setUp() throws Exception { From 1534a8fb83cc47489d86c5d5e9382e35b1cc5ed5 Mon Sep 17 00:00:00 2001 From: Justin Bertram Date: Thu, 20 Jun 2019 13:51:06 -0500 Subject: [PATCH 2/2] Fix JDK version for Travis --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 2c7f5fbbc9..6839d8c4fd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,8 @@ sudo: false language: java install: true +jdk: + - openjdk8 # clean out Artemis artifacts from the cache before_install: