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