You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2018/09/26 18:47:19 UTC

activemq-artemis git commit: ARTEMIS-2094 - Fix Configuration change loss when network Issue

Repository: activemq-artemis
Updated Branches:
  refs/heads/2.6.x 4f6a13e0f -> 89a6ba92a


ARTEMIS-2094 - Fix Configuration change loss when network Issue

(cherry picked from commit cce0e19)

Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/89a6ba92
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/89a6ba92
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/89a6ba92

Branch: refs/heads/2.6.x
Commit: 89a6ba92a7ee6c42927453355e870a49387d670e
Parents: 4f6a13e
Author: Michael André Pearce <mi...@me.com>
Authored: Wed Sep 26 15:47:05 2018 +0100
Committer: Michael André Pearce <mi...@me.com>
Committed: Wed Sep 26 15:48:57 2018 +0100

----------------------------------------------------------------------
 .../core/server/impl/ActiveMQServerImpl.java    | 58 ++++++++++----------
 .../tests/integration/jms/RedeployTest.java     | 21 ++++++-
 .../test/resources/reload-backup-changed.xml    | 14 +++++
 .../test/resources/reload-backup-original.xml   | 14 +++++
 .../src/test/resources/reload-live-changed.xml  | 14 +++++
 .../src/test/resources/reload-live-original.xml | 14 +++++
 6 files changed, 105 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/89a6ba92/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 8557852..87aafdc 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
@@ -2390,15 +2390,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
       }
 
       // Deploy the rest of the stuff
-
-      // Deploy predefined addresses
-      deployAddressesFromConfiguration();
-
-      // Deploy any predefined queues
-      deployQueuesFromConfiguration();
-
-      // Undeploy any addresses and queues not in config
-      undeployAddressesAndQueueNotInConfiguration();
+      deployReloadableConfigFromConfiguration(configuration);
 
       // 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
@@ -2620,6 +2612,8 @@ public class ActiveMQServerImpl implements ActiveMQServer {
       }
    }
 
+
+
    private JournalLoadInformation[] loadJournals() throws Exception {
       JournalLoader journalLoader = activation.createJournalLoader(postOffice, pagingManager, storageManager, queueFactory, nodeManager, managementService, groupingHandler, configuration, parentServer);
 
@@ -3169,30 +3163,36 @@ public class ActiveMQServerImpl implements ActiveMQServer {
 
       @Override
       public void reload(URL uri) throws Exception {
+         Configuration config = new FileConfigurationParser().parseMainConfig(uri.openStream());
+         configuration.setSecurityRoles(config.getSecurityRoles());
+         configuration.setAddressesSettings(config.getAddressesSettings());
+         configuration.setDivertConfigurations(config.getDivertConfigurations());
+         configuration.setAddressConfigurations(config.getAddressConfigurations());
+         configuration.setQueueConfigurations(config.getQueueConfigurations());
          if (isActive()) {
-            Configuration config = new FileConfigurationParser().parseMainConfig(uri.openStream());
-            ActiveMQServerLogger.LOGGER.reloadingConfiguration("security");
-            securityRepository.swap(config.getSecurityRoles().entrySet());
-            configuration.setSecurityRoles(config.getSecurityRoles());
-
-            ActiveMQServerLogger.LOGGER.reloadingConfiguration("address settings");
-            addressSettingsRepository.swap(config.getAddressesSettings().entrySet());
-            configuration.setAddressesSettings(config.getAddressesSettings());
-
-            ActiveMQServerLogger.LOGGER.reloadingConfiguration("diverts");
-            for (DivertConfiguration divertConfig : config.getDivertConfigurations()) {
-               if (postOffice.getBinding(new SimpleString(divertConfig.getName())) == null) {
-                  deployDivert(divertConfig);
-               }
-            }
+            deployReloadableConfigFromConfiguration(configuration);
+         }
+      }
+   }
 
-            ActiveMQServerLogger.LOGGER.reloadingConfiguration("addresses");
-            undeployAddressesAndQueueNotInConfiguration(config);
-            deployAddressesFromConfiguration(config);
-            configuration.setAddressConfigurations(config.getAddressConfigurations());
-            configuration.setQueueConfigurations(config.getQueueConfigurations());
+   private void deployReloadableConfigFromConfiguration(Configuration config) throws Exception {
+      ActiveMQServerLogger.LOGGER.reloadingConfiguration("security");
+      securityRepository.swap(config.getSecurityRoles().entrySet());
+
+      ActiveMQServerLogger.LOGGER.reloadingConfiguration("address settings");
+      addressSettingsRepository.swap(config.getAddressesSettings().entrySet());
+
+      ActiveMQServerLogger.LOGGER.reloadingConfiguration("diverts");
+      for (DivertConfiguration divertConfig : config.getDivertConfigurations()) {
+         if (postOffice.getBinding(new SimpleString(divertConfig.getName())) == null) {
+            deployDivert(divertConfig);
          }
       }
+
+      ActiveMQServerLogger.LOGGER.reloadingConfiguration("addresses");
+      undeployAddressesAndQueueNotInConfiguration(config);
+      deployAddressesFromConfiguration(config);
+      deployQueuesFromListCoreQueueConfiguration(config.getQueueConfigurations());
    }
 
    public Set<ActivateCallback> getActivateCallbacks() {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/89a6ba92/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 b9999d0..ba63166 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
@@ -21,6 +21,7 @@ import java.net.URL;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.StandardCopyOption;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
@@ -41,6 +42,7 @@ import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.core.postoffice.QueueBinding;
 import org.apache.activemq.artemis.core.security.Role;
 import org.apache.activemq.artemis.core.server.impl.AddressInfo;
+import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
 import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
 import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
 import org.apache.activemq.artemis.jms.server.embedded.EmbeddedJMS;
@@ -108,6 +110,12 @@ public class RedeployTest extends ActiveMQTestBase {
 
    @Test
    public void testRedeployWithFailover() throws Exception {
+
+      Set<Role> original = new HashSet<>();
+      original.add(new Role("a", false, true, false, false, false, false, false, false, false, false));
+      Set<Role> changed = new HashSet<>();
+      changed.add(new Role("b", false, true, false, false, false, false, false, false, false, false));
+
       EmbeddedJMS live = new EmbeddedJMS();
       EmbeddedJMS backup = new EmbeddedJMS();
 
@@ -135,6 +143,11 @@ public class RedeployTest extends ActiveMQTestBase {
 
          Wait.waitFor(() -> backup.getActiveMQServer().isReplicaSync(), 10000, 200);
 
+         assertEquals("Test address settings original - live", AddressFullMessagePolicy.BLOCK, live.getActiveMQServer().getAddressSettingsRepository().getMatch("myQueue").getAddressFullMessagePolicy());
+         assertEquals("Test address settings original - backup", AddressFullMessagePolicy.BLOCK, backup.getActiveMQServer().getAddressSettingsRepository().getMatch("myQueue").getAddressFullMessagePolicy());
+         assertEquals("Test security settings original - live", original, live.getActiveMQServer().getSecurityRepository().getMatch("myQueue"));
+         assertEquals("Test security settings original - backup", original, backup.getActiveMQServer().getSecurityRepository().getMatch("myQueue"));
+
          final ReusableLatch liveReloadLatch = new ReusableLatch(1);
          Runnable liveTick = () -> liveReloadLatch.countDown();
          live.getActiveMQServer().getReloadManager().setTick(liveTick);
@@ -162,9 +175,13 @@ public class RedeployTest extends ActiveMQTestBase {
             Session session = connection.createSession();
             Queue queue = session.createQueue("myQueue2");
             MessageProducer producer = session.createProducer(queue);
-            producer.send(session.createTextMessage("text"));
+            producer.send(session.createTextMessage("text1"));
          }
 
+         assertFalse(backup.getActiveMQServer().isActive());
+         assertEquals("Test address settings redeploy - live", AddressFullMessagePolicy.PAGE, live.getActiveMQServer().getAddressSettingsRepository().getMatch("myQueue").getAddressFullMessagePolicy());
+         assertEquals("Test security settings redeploy - live", changed, live.getActiveMQServer().getSecurityRepository().getMatch("myQueue"));
+
          live.stop();
 
          Wait.waitFor(() -> (backup.getActiveMQServer().isActive()), 5000, 100);
@@ -180,6 +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());
       } finally {
          live.stop();
          backup.stop();

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/89a6ba92/tests/integration-tests/src/test/resources/reload-backup-changed.xml
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/resources/reload-backup-changed.xml b/tests/integration-tests/src/test/resources/reload-backup-changed.xml
index 8ea9241..a4d94f7 100644
--- a/tests/integration-tests/src/test/resources/reload-backup-changed.xml
+++ b/tests/integration-tests/src/test/resources/reload-backup-changed.xml
@@ -78,5 +78,19 @@ under the License.
             </anycast>
          </address>
       </addresses>
+
+      <address-settings>
+         <address-setting match="#" >
+            <address-full-policy>PAGE</address-full-policy>
+            <config-delete-queues>FORCE</config-delete-queues>
+            <config-delete-addresses>FORCE</config-delete-addresses>
+         </address-setting>
+      </address-settings>
+
+      <security-settings>
+         <security-setting match="#" >
+            <permission type="consume" roles="b" />
+         </security-setting>
+      </security-settings>
    </core>
 </configuration>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/89a6ba92/tests/integration-tests/src/test/resources/reload-backup-original.xml
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/resources/reload-backup-original.xml b/tests/integration-tests/src/test/resources/reload-backup-original.xml
index 54a01a9..5dd92b3 100644
--- a/tests/integration-tests/src/test/resources/reload-backup-original.xml
+++ b/tests/integration-tests/src/test/resources/reload-backup-original.xml
@@ -73,5 +73,19 @@ under the License.
             </anycast>
          </address>
       </addresses>
+
+      <address-settings>
+         <address-setting match="#" >
+            <address-full-policy>BLOCK</address-full-policy>
+            <config-delete-queues>FORCE</config-delete-queues>
+            <config-delete-addresses>FORCE</config-delete-addresses>
+         </address-setting>
+      </address-settings>
+
+      <security-settings>
+         <security-setting match="#" >
+            <permission type="consume" roles="a" />
+         </security-setting>
+      </security-settings>
    </core>
 </configuration>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/89a6ba92/tests/integration-tests/src/test/resources/reload-live-changed.xml
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/resources/reload-live-changed.xml b/tests/integration-tests/src/test/resources/reload-live-changed.xml
index 17120ce..f603263 100644
--- a/tests/integration-tests/src/test/resources/reload-live-changed.xml
+++ b/tests/integration-tests/src/test/resources/reload-live-changed.xml
@@ -78,5 +78,19 @@ under the License.
             </anycast>
          </address>
       </addresses>
+
+      <address-settings>
+         <address-setting match="#" >
+            <address-full-policy>PAGE</address-full-policy>
+            <config-delete-queues>FORCE</config-delete-queues>
+            <config-delete-addresses>FORCE</config-delete-addresses>
+         </address-setting>
+      </address-settings>
+
+      <security-settings>
+         <security-setting match="#" >
+            <permission type="consume" roles="b" />
+         </security-setting>
+      </security-settings>
    </core>
 </configuration>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/89a6ba92/tests/integration-tests/src/test/resources/reload-live-original.xml
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/resources/reload-live-original.xml b/tests/integration-tests/src/test/resources/reload-live-original.xml
index 9051d58..3979c9a 100644
--- a/tests/integration-tests/src/test/resources/reload-live-original.xml
+++ b/tests/integration-tests/src/test/resources/reload-live-original.xml
@@ -73,5 +73,19 @@ under the License.
             </anycast>
          </address>
       </addresses>
+
+      <address-settings>
+         <address-setting match="#" >
+            <address-full-policy>BLOCK</address-full-policy>
+            <config-delete-queues>FORCE</config-delete-queues>
+            <config-delete-addresses>FORCE</config-delete-addresses>
+         </address-setting>
+      </address-settings>
+
+      <security-settings>
+         <security-setting match="#" >
+            <permission type="consume" roles="a" />
+         </security-setting>
+      </security-settings>
    </core>
 </configuration>