Repository: activemq-artemis Updated Branches: refs/heads/2.6.x ec910388c -> 6333c2d0a
ARTEMIS-2094 Only deploy reloadable config if reloaded. (cherry picked from commit 8c6322deeda5f3f13f7b1f53d0813d04bf8d0de8) Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/6333c2d0 Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/6333c2d0 Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/6333c2d0 Branch: refs/heads/2.6.x Commit: 6333c2d0aa42e9a15b08e196d4e38585a842ae2d Parents: ec91038 Author: Michael André Pearce <[email protected]> Authored: Tue Oct 9 18:17:31 2018 +0100 Committer: Clebert Suconic <[email protected]> Committed: Thu Oct 11 11:00:08 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/6333c2d0/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 87aafdc..c990ad6 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; @@ -217,6 +218,8 @@ public class ActiveMQServerImpl implements ActiveMQServer { private final Configuration configuration; + private final AtomicBoolean configurationReloadDeployed; + private MBeanServer mbeanServer; private volatile SecurityStore securityStore; @@ -402,6 +405,8 @@ public class ActiveMQServerImpl implements ActiveMQServer { this.configuration = configuration; + this.configurationReloadDeployed = new AtomicBoolean(true); + this.mbeanServer = mbeanServer; this.securityManager = securityManager; @@ -2390,7 +2395,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 @@ -3169,30 +3183,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/6333c2d0/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 ba63166..e892d93 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 @@ -197,8 +197,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();
