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();

Reply via email to