From f60e2533a75aa49ab986341835c57d66ee88b75b Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Thu, 1 May 2014 15:16:20 +0000 Subject: QPID-5715: Fix sporadically faling BDB HA tests git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1591677 13f79535-47bb-0310-9956-ffa450edef68 --- .../store/berkeleydb/BDBHAVirtualHostNodeTest.java | 47 +++++++++++++--------- 1 file changed, 27 insertions(+), 20 deletions(-) (limited to 'qpid/java') diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java index 78a86c685d..5e5458b382 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBHAVirtualHostNodeTest.java @@ -47,6 +47,7 @@ import org.apache.qpid.server.model.VirtualHostNode; import org.apache.qpid.server.store.DurableConfigurationStore; import org.apache.qpid.server.util.BrokerTestHelper; import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHARemoteReplicationNode; +import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHARemoteReplicationNodeImpl; import org.apache.qpid.server.virtualhostnode.berkeleydb.BDBHAVirtualHostNode; import org.apache.qpid.test.utils.QpidTestCase; import org.apache.qpid.util.FileUtils; @@ -315,19 +316,9 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase replica.setAttribute(BDBHAVirtualHostNode.ROLE, "REPLICA", "MASTER"); - int awaitMastershipCount = 0; - while(!"MASTER".equals(replica.getRole())) - { - Thread.sleep(100); - if (awaitMastershipCount > 50) - { - fail("Replica did not assume master role"); - } - awaitMastershipCount++; - } + assertNodeRole(replica, "MASTER"); } - public void testTransferMasterToReplica() throws Exception { int node1PortNumber = findFreePort(); @@ -404,20 +395,22 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase assertTrue("Replication nodes have not been seen during 5s", remoteNodeLatch.await(5, TimeUnit.SECONDS)); Collection remoteNodes = node1.getRemoteReplicationNodes(); - RemoteReplicationNode replicaRemoteNode = remoteNodes.iterator().next(); - replicaRemoteNode.setAttribute(BDBHARemoteReplicationNode.ROLE, "REPLICA", "MASTER"); + BDBHARemoteReplicationNodeImpl replicaRemoteNode = (BDBHARemoteReplicationNodeImpl)remoteNodes.iterator().next(); - BDBHAVirtualHostNode replica = replicaRemoteNode.getName().equals(node2.getName())? node2 : node3; - int awaitMastershipCount = 0; - while(!"MASTER".equals(replica.getRole())) + long awaitReplicaRoleCount = 0; + while(!"REPLICA".equals(replicaRemoteNode.getRole())) { Thread.sleep(100); - if (awaitMastershipCount > 50) + if (awaitReplicaRoleCount > 50) { - fail("Replica did not assume master role"); + fail("Remote replication node is not in a REPLICA role"); } - awaitMastershipCount++; + awaitReplicaRoleCount++; } + replicaRemoteNode.setAttributes(Collections.singletonMap(BDBHARemoteReplicationNode.ROLE, "MASTER")); + + BDBHAVirtualHostNode replica = replicaRemoteNode.getName().equals(node2.getName())? node2 : node3; + assertNodeRole(replica, "MASTER"); } public void testMutatingRoleWhenNotReplica_IsDisallowed() throws Exception @@ -438,7 +431,7 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase BDBHAVirtualHostNode node = createHaVHN(node1Attributes); assertEquals("Failed to activate node", State.ACTIVE, node.setDesiredState(node.getState(), State.ACTIVE)); - assertEquals("Node is expected to be master", "MASTER", node.getRole()); + assertNodeRole(node, "MASTER"); try { @@ -458,6 +451,20 @@ public class BDBHAVirtualHostNodeTest extends QpidTestCase _nodes.add(node); return node; } + + private void assertNodeRole(BDBHAVirtualHostNode node, String roleName) throws InterruptedException + { + int awaitMastershipCount = 0; + while(!roleName.equals(node.getRole())) + { + Thread.sleep(100); + if (awaitMastershipCount > 50) + { + fail("Node " + node.getName() + " did not transit into role " + roleName); + } + awaitMastershipCount++; + } + } } -- cgit v1.2.1