Repository: activemq-artemis Updated Branches: refs/heads/master f5a73dfab -> 2b3819bc1
ARTEMIS-2094 Only deploy reloadable config if reloaded. Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/8c6322de Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/8c6322de Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/8c6322de Branch: refs/heads/master Commit: 8c6322deeda5f3f13f7b1f53d0813d04bf8d0de8 Parents: f5a73df Author: Michael André Pearce <michael.andre.pea...@me.com> Authored: Tue Oct 9 18:17:31 2018 +0100 Committer: Clebert Suconic <clebertsuco...@apache.org> Committed: Wed Oct 10 14:19:52 2018 -0400 ---------------------------------------------------------------------- .../core/server/impl/ActiveMQServerImpl.java | 49 +++++++++++++------- .../tests/integration/jms/RedeployTest.java | 4 +- 2 files changed, 35 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/8c6322de/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java ---------------------------------------------------------------------- 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 a5591d0..64b09d1 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 @@ -16,6 +16,7 @@ */ package org.apache.activemq.artemis.core.server.impl; +import java.util.concurrent.atomic.AtomicBoolean; import javax.management.MBeanServer; import java.io.File; import java.io.IOException; @@ -227,6 +228,8 @@ public class ActiveMQServerImpl implements ActiveMQServer { private final Configuration configuration; + private final AtomicBoolean configurationReloadDeployed; + private MBeanServer mbeanServer; private volatile SecurityStore securityStore; @@ -412,6 +415,8 @@ public class ActiveMQServerImpl implements ActiveMQServer { this.configuration = configuration; + this.configurationReloadDeployed = new AtomicBoolean(true); + this.mbeanServer = mbeanServer; this.securityManager = securityManager; @@ -2602,7 +2607,16 @@ public class ActiveMQServerImpl implements ActiveMQServer { } // Deploy the rest of the stuff - deployReloadableConfigFromConfiguration(configuration); + + // Deploy predefined addresses + deployAddressesFromConfiguration(); + // Deploy any predefined queues + deployQueuesFromConfiguration(); + // Undeploy any addresses and queues not in config + undeployAddressesAndQueueNotInConfiguration(); + + //deploy any reloaded config + deployReloadableConfigFromConfiguration(); // We need to call this here, this gives any dependent server a chance to deploy its own addresses // this needs to be done before clustering is fully activated @@ -3482,30 +3496,33 @@ public class ActiveMQServerImpl implements ActiveMQServer { configuration.setDivertConfigurations(config.getDivertConfigurations()); configuration.setAddressConfigurations(config.getAddressConfigurations()); configuration.setQueueConfigurations(config.getQueueConfigurations()); + configurationReloadDeployed.set(false); if (isActive()) { - deployReloadableConfigFromConfiguration(configuration); + deployReloadableConfigFromConfiguration(); } } } - private void deployReloadableConfigFromConfiguration(Configuration config) throws Exception { - ActiveMQServerLogger.LOGGER.reloadingConfiguration("security"); - securityRepository.swap(config.getSecurityRoles().entrySet()); + private void deployReloadableConfigFromConfiguration() throws Exception { + if (configurationReloadDeployed.compareAndSet(false, true)) { + ActiveMQServerLogger.LOGGER.reloadingConfiguration("security"); + securityRepository.swap(configuration.getSecurityRoles().entrySet()); - ActiveMQServerLogger.LOGGER.reloadingConfiguration("address settings"); - addressSettingsRepository.swap(config.getAddressesSettings().entrySet()); + ActiveMQServerLogger.LOGGER.reloadingConfiguration("address settings"); + addressSettingsRepository.swap(configuration.getAddressesSettings().entrySet()); - ActiveMQServerLogger.LOGGER.reloadingConfiguration("diverts"); - for (DivertConfiguration divertConfig : config.getDivertConfigurations()) { - if (postOffice.getBinding(new SimpleString(divertConfig.getName())) == null) { - deployDivert(divertConfig); + ActiveMQServerLogger.LOGGER.reloadingConfiguration("diverts"); + for (DivertConfiguration divertConfig : configuration.getDivertConfigurations()) { + if (postOffice.getBinding(new SimpleString(divertConfig.getName())) == null) { + deployDivert(divertConfig); + } } - } - ActiveMQServerLogger.LOGGER.reloadingConfiguration("addresses"); - undeployAddressesAndQueueNotInConfiguration(config); - deployAddressesFromConfiguration(config); - deployQueuesFromListCoreQueueConfiguration(config.getQueueConfigurations()); + ActiveMQServerLogger.LOGGER.reloadingConfiguration("addresses"); + undeployAddressesAndQueueNotInConfiguration(configuration); + deployAddressesFromConfiguration(configuration); + deployQueuesFromListCoreQueueConfiguration(configuration.getQueueConfigurations()); + } } public Set<ActivateCallback> getActivateCallbacks() { http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/8c6322de/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java index c4c6606..c78620e 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java @@ -295,8 +295,8 @@ public class RedeployTest extends ActiveMQTestBase { Assert.assertNotNull("Queue wasn't deployed accordingly", consumer.receive(5000)); Assert.assertNotNull(consumer.receive(5000)); } - assertEquals("Test address settings redeploy - backup", changed, backup.getActiveMQServer().getSecurityRepository().getMatch("myQueue")); - assertEquals("Test security settings redeploy - backup", AddressFullMessagePolicy.PAGE, backup.getActiveMQServer().getAddressSettingsRepository().getMatch("myQueue").getAddressFullMessagePolicy()); + assertEquals("Test security settings redeploy - backup", changed, backup.getActiveMQServer().getSecurityRepository().getMatch("myQueue")); + assertEquals("Test address settings redeploy - backup", AddressFullMessagePolicy.PAGE, backup.getActiveMQServer().getAddressSettingsRepository().getMatch("myQueue").getAddressFullMessagePolicy()); } finally { live.stop(); backup.stop();