You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2016/02/18 14:37:31 UTC

svn commit: r1731073 - in /qpid/java/trunk: bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java

Author: kwall
Date: Thu Feb 18 13:37:31 2016
New Revision: 1731073

URL: http://svn.apache.org/viewvc?rev=1731073&view=rev
Log:
QPID-7080: [Java Tests - BDB HA] Prevent sporadic failure from MultiNodeTest#testQuorumOverride

Modified:
    qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java
    qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java

Modified: qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java?rev=1731073&r1=1731072&r2=1731073&view=diff
==============================================================================
--- qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java (original)
+++ qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/MultiNodeTest.java Thu Feb 18 13:37:31 2016
@@ -62,10 +62,6 @@ import org.apache.qpid.test.utils.QpidBr
 import org.apache.qpid.test.utils.TestUtils;
 import org.apache.qpid.util.FileUtils;
 
-/**
- * The HA black box tests test the BDB cluster as a opaque unit.  Client connects to
- * the cluster via a failover url
- */
 public class MultiNodeTest extends QpidBrokerTestCase
 {
     protected static final Logger LOGGER = LoggerFactory.getLogger(MultiNodeTest.class);
@@ -633,6 +629,10 @@ public class MultiNodeTest extends QpidB
         }
     }
 
+    /**
+     * Tests aims to demonstrate that in a disaster situation (where all nodes except the master is lost), that operation
+     * can be continued from a single node using the QUORUM_OVERRIDE feature.
+     */
     public void testQuorumOverride() throws Exception
     {
         final Connection connection = getConnection(_positiveFailoverUrl);
@@ -648,6 +648,9 @@ public class MultiNodeTest extends QpidB
             _groupCreator.stopNode(p);
         }
 
+        // Failover may or may not occur. It depends on the relative timing of the internal db-ping and the application of the
+        // QUORUM_OVERRIDE.
+
         Map<String, Object> attributes = _groupCreator.getNodeAttributes(activeBrokerPort);
         assertEquals("Broker has unexpected quorum override", new Integer(0), attributes.get(BDBHAVirtualHostNode.QUORUM_OVERRIDE));
         _groupCreator.setNodeAttributes(activeBrokerPort, Collections.<String, Object>singletonMap(BDBHAVirtualHostNode.QUORUM_OVERRIDE, 1));
@@ -655,6 +658,9 @@ public class MultiNodeTest extends QpidB
         attributes = _groupCreator.getNodeAttributes(activeBrokerPort);
         assertEquals("Broker has unexpected quorum override", new Integer(1), attributes.get(BDBHAVirtualHostNode.QUORUM_OVERRIDE));
 
+        // Be certain the failover isn't going to occur, or has completed, by awaiting the transaction counter to rise
+        awaitNextTransaction(activeBrokerPort);
+
         assertProducingConsuming(connection);
     }
 
@@ -764,6 +770,28 @@ public class MultiNodeTest extends QpidB
         }
     }
 
+    private void awaitNextTransaction(final int brokerPort) throws Exception
+    {
+        Map<String, Object> attributes = _groupCreator.getNodeAttributes(brokerPort);
+        final int originalTransactionId = (int) attributes.get(BDBHAVirtualHostNode.LAST_KNOWN_REPLICATION_TRANSACTION_ID);
+        int currentTransactionId = 0;
+        long timeout = System.currentTimeMillis() + 60000;
+        LOGGER.debug("Awaiting next transaction. Original transaction id {}", originalTransactionId);
+        do
+        {
+            Thread.sleep(250);
+            attributes = _groupCreator.getNodeAttributes(brokerPort);
+            currentTransactionId = (int) attributes.get(BDBHAVirtualHostNode.LAST_KNOWN_REPLICATION_TRANSACTION_ID);
+            LOGGER.debug("Current transaction id {}", currentTransactionId);
+        }
+        while (originalTransactionId >= currentTransactionId && timeout > System.currentTimeMillis());
+
+        assertTrue("Group transaction has not occurred within timeout."
+                   + "Current transaction id " + currentTransactionId
+                   + "Original transaction id " + originalTransactionId,
+                   currentTransactionId > originalTransactionId);
+    }
+
     private final class FailoverAwaitingListener implements ConnectionListener
     {
         private final CountDownLatch _failoverCompletionLatch;

Modified: qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java?rev=1731073&r1=1731072&r2=1731073&view=diff
==============================================================================
--- qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java (original)
+++ qpid/java/trunk/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java Thu Feb 18 13:37:31 2016
@@ -500,6 +500,10 @@ public class QpidBrokerTestCase extends
         return null;
     }
 
+    /**
+     * Tests that a connection is functional by producing and consuming a single message.
+     * Will fail if failover interrupts either transaction.
+     */
     public void assertProducingConsuming(final Connection connection) throws Exception
     {
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org