ARTEMIS-2391 static address may be auto-deleted

This commit is contained in:
Justin Bertram 2019-06-20 13:39:45 -05:00 committed by Clebert Suconic
parent d1edb8d6e2
commit 3b82cad024
2 changed files with 53 additions and 3 deletions

View File

@ -1512,7 +1512,7 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding
return true; return true;
} }
/** /**
* The expiry scanner can't be started until the whole server has been started other wise you may get races * The expiry scanner can't be started until the whole server has been started other wise you may get races
*/ */
@Override @Override
@ -1601,10 +1601,10 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding
AddressSettings settings = addressSettingsRepository.getMatch(address.toString()); AddressSettings settings = addressSettingsRepository.getMatch(address.toString());
try { 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()) { if (ActiveMQServerLogger.LOGGER.isDebugEnabled()) {
ActiveMQServerLogger.LOGGER.info("deleting auto-created address \"" + address + ".\""); ActiveMQServerLogger.LOGGER.debug("deleting auto-created address \"" + address + ".\"");
} }
server.removeAddressInfo(address, null); server.removeAddressInfo(address, null);

View File

@ -163,6 +163,56 @@ public class AddressQueueDeleteDelayTest extends ActiveMQTestBase {
assertTrue(Wait.waitFor(() -> server.getAddressInfo(address) == null, DURATION_MILLIS, SLEEP_MILLIS)); 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 @Override
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {