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 2016/11/29 20:24:30 UTC

[1/2] activemq-artemis git commit: This closes #899

Repository: activemq-artemis
Updated Branches:
  refs/heads/master 5a9647cd7 -> f820e0124


This closes #899


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

Branch: refs/heads/master
Commit: f820e012497878a46252ffffc668ecf72c979fb0
Parents: 5a9647c 43634c0
Author: Clebert Suconic <cl...@apache.org>
Authored: Tue Nov 29 15:24:06 2016 -0500
Committer: Clebert Suconic <cl...@apache.org>
Committed: Tue Nov 29 15:24:06 2016 -0500

----------------------------------------------------------------------
 .../artemis/core/server/NetworkHealthCheck.java |  49 +++++++--
 .../artemis/logs/ActiveMQUtilLogger.java        |   5 +
 .../utils/ActiveMQScheduledComponentTest.java   |  26 +++++
 .../artemis/utils/NetworkHealthTest.java        |  21 +++-
 .../NetworkIsolationReplicationTest.java        | 110 +++++++++++++------
 5 files changed, 167 insertions(+), 44 deletions(-)
----------------------------------------------------------------------



[2/2] activemq-artemis git commit: ARTEMIS-863 parsing spaces properly on network health addresses and avoiding loopback on configuration

Posted by cl...@apache.org.
ARTEMIS-863 parsing spaces properly on network health addresses and avoiding loopback on configuration


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

Branch: refs/heads/master
Commit: 43634c098b1815bc6abe220b6e21b76bdbcb7856
Parents: 5a9647c
Author: Clebert Suconic <cl...@apache.org>
Authored: Mon Nov 28 10:38:34 2016 -0500
Committer: Clebert Suconic <cl...@apache.org>
Committed: Tue Nov 29 15:24:06 2016 -0500

----------------------------------------------------------------------
 .../artemis/core/server/NetworkHealthCheck.java |  49 +++++++--
 .../artemis/logs/ActiveMQUtilLogger.java        |   5 +
 .../utils/ActiveMQScheduledComponentTest.java   |  26 +++++
 .../artemis/utils/NetworkHealthTest.java        |  21 +++-
 .../NetworkIsolationReplicationTest.java        | 110 +++++++++++++------
 5 files changed, 167 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/43634c09/artemis-commons/src/main/java/org/apache/activemq/artemis/core/server/NetworkHealthCheck.java
----------------------------------------------------------------------
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/core/server/NetworkHealthCheck.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/core/server/NetworkHealthCheck.java
index 8b7770d..ec98aad 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/core/server/NetworkHealthCheck.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/core/server/NetworkHealthCheck.java
@@ -31,6 +31,7 @@ import java.security.PrivilegedAction;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.activemq.artemis.logs.ActiveMQUtilLogger;
 import org.apache.activemq.artemis.utils.ActiveMQThreadFactory;
 import org.apache.activemq.artemis.utils.ConcurrentHashSet;
 import org.jboss.logging.Logger;
@@ -56,6 +57,9 @@ public class NetworkHealthCheck extends ActiveMQScheduledComponent {
 
    private String ipv6Command = IPV6_DEFAULT_COMMAND;
 
+   // To be used on tests. As we use the loopback as a valid address on tests.
+   private boolean ignoreLoopback = false;
+
    /**
     * The timeout to be used on isReachable
     */
@@ -88,6 +92,23 @@ public class NetworkHealthCheck extends ActiveMQScheduledComponent {
       return this;
    }
 
+   public boolean isIgnoreLoopback() {
+      return ignoreLoopback;
+   }
+
+   public NetworkHealthCheck setIgnoreLoopback(boolean ignoreLoopback) {
+      this.ignoreLoopback = ignoreLoopback;
+      return this;
+   }
+
+   public Set<InetAddress> getAddresses() {
+      return addresses;
+   }
+
+   public Set<URL> getUrls() {
+      return urls;
+   }
+
    public String getNICName() {
       if (networkInterface != null) {
          return networkInterface.getName();
@@ -101,10 +122,12 @@ public class NetworkHealthCheck extends ActiveMQScheduledComponent {
          String[] addresses = addressList.split(",");
 
          for (String address : addresses) {
-            try {
-               this.addAddress(InetAddress.getByName(address));
-            } catch (Exception e) {
-               logger.warn(e.getMessage(), e);
+            if (!address.trim().isEmpty()) {
+               try {
+                  this.addAddress(InetAddress.getByName(address.trim()));
+               } catch (Exception e) {
+                  logger.warn(e.getMessage(), e);
+               }
             }
          }
       }
@@ -117,10 +140,12 @@ public class NetworkHealthCheck extends ActiveMQScheduledComponent {
          String[] addresses = addressList.split(",");
 
          for (String address : addresses) {
-            try {
-               this.addURL(new URL(address));
-            } catch (Exception e) {
-               logger.warn(e.getMessage(), e);
+            if (!address.trim().isEmpty()) {
+               try {
+                  this.addURL(new URL(address.trim()));
+               } catch (Exception e) {
+                  logger.warn(e.getMessage(), e);
+               }
             }
          }
       }
@@ -180,9 +205,13 @@ public class NetworkHealthCheck extends ActiveMQScheduledComponent {
       if (!check(address)) {
          logger.warn("Ping Address " + address + " wasn't reacheable");
       }
-      addresses.add(address);
 
-      checkStart();
+      if (!ignoreLoopback && address.isLoopbackAddress()) {
+         ActiveMQUtilLogger.LOGGER.addressloopback(address.toString());
+      } else {
+         addresses.add(address);
+         checkStart();
+      }
       return this;
    }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/43634c09/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/ActiveMQUtilLogger.java
----------------------------------------------------------------------
diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/ActiveMQUtilLogger.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/ActiveMQUtilLogger.java
index b26d30d..ab285f9 100644
--- a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/ActiveMQUtilLogger.java
+++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/ActiveMQUtilLogger.java
@@ -48,4 +48,9 @@ public interface ActiveMQUtilLogger extends BasicLogger {
    @Message(id = 202000, value = "Missing privileges to set Thread Context Class Loader on Thread Factory. Using current Thread Context Class Loader",
       format = Message.Format.MESSAGE_FORMAT)
    void missingPrivsForClassloader();
+
+   @LogMessage(level = Logger.Level.WARN)
+   @Message(id = 202001, value = "{0} is a loopback address and will be discarded.",
+      format = Message.Format.MESSAGE_FORMAT)
+   void addressloopback(String address);
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/43634c09/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/ActiveMQScheduledComponentTest.java
----------------------------------------------------------------------
diff --git a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/ActiveMQScheduledComponentTest.java b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/ActiveMQScheduledComponentTest.java
index 0e64cae..2fcfb1b 100644
--- a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/ActiveMQScheduledComponentTest.java
+++ b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/ActiveMQScheduledComponentTest.java
@@ -79,6 +79,32 @@ public class ActiveMQScheduledComponentTest {
    }
 
    @Test
+   public void testAccumulationOwnPool() throws Exception {
+      final AtomicInteger count = new AtomicInteger(0);
+
+      final ActiveMQScheduledComponent local = new ActiveMQScheduledComponent(100, TimeUnit.MILLISECONDS, false) {
+         @Override
+         public void run() {
+            if (count.get() == 0) {
+               try {
+                  Thread.sleep(500);
+               } catch (Exception e) {
+               }
+            }
+            count.incrementAndGet();
+         }
+      };
+
+      local.start();
+
+      Thread.sleep(1000);
+
+      local.stop();
+
+      Assert.assertTrue("just because one took a lot of time, it doesn't mean we can accumulate many, we got " + count + " executions", count.get() < 5 && count.get() > 0);
+   }
+
+   @Test
    public void testUsingOwnExecutors() throws Exception {
       final CountDownLatch latch = new CountDownLatch(1);
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/43634c09/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/NetworkHealthTest.java
----------------------------------------------------------------------
diff --git a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/NetworkHealthTest.java b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/NetworkHealthTest.java
index 7649912..6534457 100644
--- a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/NetworkHealthTest.java
+++ b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/NetworkHealthTest.java
@@ -57,7 +57,7 @@ public class NetworkHealthTest {
 
    NetworkHealthCheck addCheck(NetworkHealthCheck check) {
       list.add(check);
-      return check;
+      return check.setIgnoreLoopback(true);
    }
 
    HttpServer httpServer;
@@ -137,7 +137,26 @@ public class NetworkHealthTest {
       Assert.assertTrue(check.purePing(address));
 
       Assert.assertTrue(check.check(address));
+   }
+
+   @Test
+   public void testParseSpaces() throws Exception {
+      NetworkHealthCheck check = addCheck(new NetworkHealthCheck(null, 100, 100));
+
+      // using two addresses for URI and localhost
+      check.parseAddressList("localhost, , 127.0.0.2").parseURIList("http://www.redhat.com, , http://www.apache.org");
+      Assert.assertEquals(2, check.getAddresses().size());
+      Assert.assertEquals(2, check.getUrls().size());
+   }
+
+   @Test
+   public void testParseLogger() throws Exception {
+      NetworkHealthCheck check = addCheck(new NetworkHealthCheck(null, 100, 100));
 
+      // using two addresses for URI and localhost
+      check.parseAddressList("localhost, , 127.0.0.2").parseURIList("http://www.redhat.com, , http://www.apache.org");
+      Assert.assertEquals(2, check.getAddresses().size());
+      Assert.assertEquals(2, check.getUrls().size());
    }
 
    @Test

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/43634c09/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/NetworkIsolationReplicationTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/NetworkIsolationReplicationTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/NetworkIsolationReplicationTest.java
index 9b42279..e179c21 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/NetworkIsolationReplicationTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/NetworkIsolationReplicationTest.java
@@ -24,12 +24,24 @@ import org.apache.activemq.artemis.api.core.TransportConfiguration;
 import org.apache.activemq.artemis.api.core.client.ClientSession;
 import org.apache.activemq.artemis.api.core.client.ClientSessionFactory;
 import org.apache.activemq.artemis.api.core.client.ServerLocator;
+import org.apache.activemq.artemis.logs.AssertionLoggerHandler;
 import org.apache.activemq.artemis.tests.util.TransportConfigurationUtils;
+import org.jboss.logging.Logger;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 
 public class NetworkIsolationReplicationTest extends FailoverTestBase {
 
+   private static final Logger logger = Logger.getLogger(NetworkIsolationReplicationTest.class);
+
+   @Before
+   @Override
+   public void setUp() throws Exception {
+      this.startBackupServer = false;
+      super.setUp();
+   }
+
    @Override
    protected TransportConfiguration getAcceptorTransportConfiguration(final boolean live) {
       return TransportConfigurationUtils.getNettyAcceptor(live, 1);
@@ -49,37 +61,59 @@ public class NetworkIsolationReplicationTest extends FailoverTestBase {
 
    @Test
    public void testDoNotActivateOnIsolation() throws Exception {
-      ServerLocator locator = getServerLocator();
+      AssertionLoggerHandler.startCapture();
 
-      backupServer.getServer().getNetworkHealthCheck().addAddress(InetAddress.getByName("203.0.113.1"));
+      try {
+         ServerLocator locator = getServerLocator();
 
-      ClientSessionFactory sf = addSessionFactory(locator.createSessionFactory());
+         // this block here is just to validate if ignoring loopback addresses logic is in place
+         {
+            backupServer.getServer().getNetworkHealthCheck().addAddress(InetAddress.getByName("127.0.0.1"));
 
-      ClientSession session = createSession(sf, false, true, true);
+            Assert.assertTrue(AssertionLoggerHandler.findText("AMQ202001"));
 
-      session.createQueue(FailoverTestBase.ADDRESS, FailoverTestBase.ADDRESS, null, true);
+            AssertionLoggerHandler.clear();
 
-      Assert.assertFalse(backupServer.getServer().getNetworkHealthCheck().check());
+            backupServer.getServer().getNetworkHealthCheck().setIgnoreLoopback(true).addAddress(InetAddress.getByName("127.0.0.1"));
 
-      crash(false, true, session);
+            Assert.assertFalse(AssertionLoggerHandler.findText("AMQ202001"));
 
-      for (int i = 0; i < 1000 && !backupServer.isStarted(); i++) {
-         Thread.sleep(10);
-      }
+            backupServer.getServer().getNetworkHealthCheck().clearAddresses();
+         }
 
-      Assert.assertTrue(backupServer.isStarted());
-      Assert.assertFalse(backupServer.isActive());
+         backupServer.getServer().getNetworkHealthCheck().addAddress(InetAddress.getByName("203.0.113.1"));
+         backupServer.getServer().start();
 
-      liveServer.start();
+         ClientSessionFactory sf = addSessionFactory(locator.createSessionFactory());
 
-      for (int i = 0; i < 1000 && backupServer.getServer().getReplicationEndpoint() != null && !backupServer.getServer().getReplicationEndpoint().isStarted(); i++) {
-         Thread.sleep(10);
-      }
+         ClientSession session = createSession(sf, false, true, true);
+
+         session.createQueue(FailoverTestBase.ADDRESS, FailoverTestBase.ADDRESS, null, true);
+
+         Assert.assertFalse(backupServer.getServer().getNetworkHealthCheck().check());
+
+         crash(false, true, session);
+
+         for (int i = 0; i < 1000 && !backupServer.isStarted(); i++) {
+            Thread.sleep(10);
+         }
+
+         Assert.assertTrue(backupServer.isStarted());
+         Assert.assertFalse(backupServer.isActive());
+
+         liveServer.start();
 
-      backupServer.getServer().getNetworkHealthCheck().clearAddresses();
+         for (int i = 0; i < 1000 && backupServer.getServer().getReplicationEndpoint() != null && !backupServer.getServer().getReplicationEndpoint().isStarted(); i++) {
+            Thread.sleep(10);
+         }
+
+         backupServer.getServer().getNetworkHealthCheck().clearAddresses();
 
-      // This will make sure the backup got synchronized after the network was activated again
-      Assert.assertTrue(backupServer.getServer().getReplicationEndpoint().isStarted());
+         // This will make sure the backup got synchronized after the network was activated again
+         Assert.assertTrue(backupServer.getServer().getReplicationEndpoint().isStarted());
+      } finally {
+         AssertionLoggerHandler.stopCapture();
+      }
    }
 
    @Test
@@ -90,29 +124,39 @@ public class NetworkIsolationReplicationTest extends FailoverTestBase {
       liveServer.getServer().getConfiguration().setNetworkCheckList("203.0.113.1").
          setNetworkCheckPeriod(100).setNetworkCheckTimeout(100);
 
-      liveServer.start();
+      try {
 
-      Assert.assertEquals(100L, liveServer.getServer().getNetworkHealthCheck().getPeriod());
+         liveServer.start();
 
-      liveServer.getServer().getNetworkHealthCheck().setTimeUnit(TimeUnit.MILLISECONDS);
+         Assert.assertEquals(100L, liveServer.getServer().getNetworkHealthCheck().getPeriod());
 
-      Assert.assertFalse(liveServer.getServer().getNetworkHealthCheck().check());
+         liveServer.getServer().getNetworkHealthCheck().setTimeUnit(TimeUnit.MILLISECONDS);
 
-      long timeout = System.currentTimeMillis() + 30000;
-      while (liveServer.isStarted() && System.currentTimeMillis() < timeout) {
-         Thread.sleep(100);
-      }
+         Assert.assertFalse(liveServer.getServer().getNetworkHealthCheck().check());
+
+         long timeout = System.currentTimeMillis() + 30000;
+         while (liveServer.isStarted() && System.currentTimeMillis() < timeout) {
+            Thread.sleep(100);
+         }
 
-      Assert.assertFalse(liveServer.isStarted());
+         Assert.assertFalse(liveServer.isStarted());
 
-      liveServer.getServer().getNetworkHealthCheck().addAddress(InetAddress.getByName("127.0.0.1"));
+         liveServer.getServer().getNetworkHealthCheck().setIgnoreLoopback(true).addAddress(InetAddress.getByName("127.0.0.1"));
+
+         timeout = System.currentTimeMillis() + 30000;
+         while (!liveServer.isStarted() && System.currentTimeMillis() < timeout) {
+            Thread.sleep(100);
+         }
 
-      timeout = System.currentTimeMillis() + 30000;
-      while (!liveServer.isStarted() && System.currentTimeMillis() < timeout) {
-         Thread.sleep(100);
+         Assert.assertTrue(liveServer.isStarted());
+      } catch (Throwable e) {
+         logger.warn(e.getMessage(), e);
+         throw e;
+      } finally {
+         liveServer.getServer().stop();
+         backupServer.getServer().stop();
       }
 
-      Assert.assertTrue(liveServer.isStarted());
    }
 
    @Override