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: 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 {