From 69ca189439d15e70e35da737982f8469ab33f8cb Mon Sep 17 00:00:00 2001 From: Clebert Suconic Date: Tue, 8 May 2018 18:42:16 -0400 Subject: [PATCH] NO-JIRA Improvements on ReplicatedMultipleServerFailoverExtraBackupsTest --- .../artemis/tests/util/ActiveMQTestBase.java | 1 - .../MultipleServerFailoverTestBase.java | 16 ++----------- ...ultipleServerFailoverExtraBackupsTest.java | 24 +++++++++++++++---- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java index 673e023a09..530c399560 100644 --- a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java +++ b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java @@ -1137,7 +1137,6 @@ public abstract class ActiveMQTestBase extends Assert { for (TopologyMemberImpl member : topology.getMembers()) { if (member.getLive() != null) { liveNodesCount++; - ActiveMQServerLogger.LOGGER.info("Found live server connected to " + server.getNodeID()); } if (member.getBackup() != null) { backupNodesCount++; diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/MultipleServerFailoverTestBase.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/MultipleServerFailoverTestBase.java index 8c34667fe4..0775e08523 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/MultipleServerFailoverTestBase.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/MultipleServerFailoverTestBase.java @@ -35,6 +35,7 @@ import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.ActiveMQServerLogger; import org.apache.activemq.artemis.core.server.NodeManager; import org.apache.activemq.artemis.core.server.Queue; +import org.apache.activemq.artemis.junit.Wait; import org.apache.activemq.artemis.tests.integration.cluster.util.SameProcessActiveMQServer; import org.apache.activemq.artemis.tests.integration.cluster.util.TestableServer; import org.apache.activemq.artemis.tests.util.ActiveMQTestBase; @@ -226,22 +227,9 @@ public abstract class MultipleServerFailoverTestBase extends ActiveMQTestBase { protected void waitForDistribution(SimpleString address, ActiveMQServer server, int messageCount) throws Exception { ActiveMQServerLogger.LOGGER.debug("waiting for distribution of messages on server " + server); - long start = System.currentTimeMillis(); - - long timeout = 5000; - Queue q = (Queue) server.getPostOffice().getBinding(address).getBindable(); - do { + Wait.waitFor(() -> getMessageCount(q) >= messageCount); - if (getMessageCount(q) >= messageCount) { - return; - } - - Thread.sleep(10); - } - while (System.currentTimeMillis() - start < timeout); - - throw new Exception(); } } diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ReplicatedMultipleServerFailoverExtraBackupsTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ReplicatedMultipleServerFailoverExtraBackupsTest.java index 62dd384179..1a1d75c37b 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ReplicatedMultipleServerFailoverExtraBackupsTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ReplicatedMultipleServerFailoverExtraBackupsTest.java @@ -18,19 +18,29 @@ package org.apache.activemq.artemis.tests.integration.cluster.failover; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import org.apache.activemq.artemis.api.core.client.ClientConsumer; import org.apache.activemq.artemis.api.core.client.ClientMessage; import org.apache.activemq.artemis.api.core.client.ClientProducer; 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.FailoverEventType; import org.apache.activemq.artemis.api.core.client.ServerLocator; import org.apache.activemq.artemis.core.config.ha.ReplicaPolicyConfiguration; +import org.apache.activemq.artemis.core.server.ActiveMQServer; +import org.apache.activemq.artemis.junit.Wait; import org.apache.activemq.artemis.tests.integration.cluster.util.TestableServer; +import org.junit.Assert; import org.junit.Test; public class ReplicatedMultipleServerFailoverExtraBackupsTest extends ReplicatedMultipleServerFailoverTest { + private void waitForSync(ActiveMQServer server) throws Exception { + Wait.waitFor(server::isReplicaSync); + } + @Override @Test public void testStartLiveFirst() throws Exception { @@ -40,8 +50,8 @@ public class ReplicatedMultipleServerFailoverExtraBackupsTest extends Replicated startServers(liveServers); backupServers.get(0).start(); backupServers.get(1).start(); - waitForRemoteBackupSynchronization(backupServers.get(0).getServer()); - waitForRemoteBackupSynchronization(backupServers.get(1).getServer()); + waitForSync(backupServers.get(0).getServer()); + waitForSync(backupServers.get(1).getServer()); // wait to start the other 2 backups so the first 2 can sync with the 2 live servers backupServers.get(2).start(); @@ -112,10 +122,16 @@ public class ReplicatedMultipleServerFailoverExtraBackupsTest extends Replicated } } + CountDownLatch failoverHappened = new CountDownLatch(1); + + session0.addFailoverListener((FailoverEventType type) -> failoverHappened.countDown()); + for (TestableServer testableServer : toCrash) { - testableServer.crash(); + testableServer.crash().await(10, TimeUnit.SECONDS); } + Assert.assertTrue(failoverHappened.await(10, TimeUnit.SECONDS)); + ClientConsumer consumer0 = session0.createConsumer(ADDRESS); ClientConsumer consumer1 = session1.createConsumer(ADDRESS); session0.start(); @@ -125,7 +141,7 @@ public class ReplicatedMultipleServerFailoverExtraBackupsTest extends Replicated ClientMessage message = consumer0.receive(1000); assertNotNull("expecting durable msg " + i, message); message.acknowledge(); - consumer1.receive(1000); + message = consumer1.receive(1000); assertNotNull("expecting durable msg " + i, message); message.acknowledge();