[jboss-cvs] JBoss Messaging SVN: r1727 - in branches/Branch_Client_Failover_Experiment: src/main/org/jboss/messaging/core/plugin/postoffice/cluster tests tests/src/org/jboss/test/messaging/jms/clustering

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Dec 8 08:22:21 EST 2006


Author: timfox
Date: 2006-12-08 08:22:15 -0500 (Fri, 08 Dec 2006)
New Revision: 1727

Modified:
   branches/Branch_Client_Failover_Experiment/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOffice.java
   branches/Branch_Client_Failover_Experiment/tests/build.xml
   branches/Branch_Client_Failover_Experiment/tests/src/org/jboss/test/messaging/jms/clustering/HATest.java
Log:
A couple of HA tests



Modified: branches/Branch_Client_Failover_Experiment/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOffice.java
===================================================================
--- branches/Branch_Client_Failover_Experiment/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOffice.java	2006-12-08 12:44:52 UTC (rev 1726)
+++ branches/Branch_Client_Failover_Experiment/src/main/org/jboss/messaging/core/plugin/postoffice/cluster/DefaultClusteredPostOffice.java	2006-12-08 13:22:15 UTC (rev 1727)
@@ -710,7 +710,7 @@
          
          if (m == null)
          {
-            m = new HashMap();
+            m = new LinkedHashMap();
             
             replicatedData.put(key, m);
          }

Modified: branches/Branch_Client_Failover_Experiment/tests/build.xml
===================================================================
--- branches/Branch_Client_Failover_Experiment/tests/build.xml	2006-12-08 12:44:52 UTC (rev 1726)
+++ branches/Branch_Client_Failover_Experiment/tests/build.xml	2006-12-08 13:22:15 UTC (rev 1727)
@@ -715,10 +715,7 @@
                     haltonerror="${junit.batchtest.haltonerror}">
             <formatter type="plain" usefile="${junit.formatter.usefile}"/>
             <fileset dir="${build.tests.classes}">
-               <include name="**/jms/clustering/ManualClusteringTest.class"/>
-               <!--
-               <include name="**/jms/clustering/SimpleClusteringTest.class"/>
-               -->
+               <include name="**/jms/clustering/*Test.class"/>
             </fileset>
          </batchtest>
       </junit>

Modified: branches/Branch_Client_Failover_Experiment/tests/src/org/jboss/test/messaging/jms/clustering/HATest.java
===================================================================
--- branches/Branch_Client_Failover_Experiment/tests/src/org/jboss/test/messaging/jms/clustering/HATest.java	2006-12-08 12:44:52 UTC (rev 1726)
+++ branches/Branch_Client_Failover_Experiment/tests/src/org/jboss/test/messaging/jms/clustering/HATest.java	2006-12-08 13:22:15 UTC (rev 1727)
@@ -22,31 +22,30 @@
 
 package org.jboss.test.messaging.jms.clustering;
 
-import javax.jms.Destination;
-import javax.jms.Message;
+import javax.jms.Connection;
 import javax.jms.MessageConsumer;
-import javax.jms.MessageProducer;
-import javax.jms.Session;
 import javax.jms.TextMessage;
-import javax.jms.Topic;
+
 import org.jboss.jms.client.JBossConnection;
 import org.jboss.jms.client.JBossConnectionFactory;
-import org.jboss.jms.client.JBossMessageConsumer;
-import org.jboss.jms.client.JBossSession;
-import org.jboss.jms.client.delegate.ClientConnectionDelegate;
-import org.jboss.jms.client.delegate.ClientSessionDelegate;
+import org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate;
 import org.jboss.jms.client.delegate.ClusteredClientConnectionFactoryDelegate;
-import org.jboss.jms.client.state.ConsumerState;
-import org.jboss.jms.client.state.SessionState;
+import org.jboss.jms.client.delegate.DelegateSupport;
+import org.jboss.jms.client.state.ConnectionState;
 import org.jboss.jms.message.MessageProxy;
+import org.jboss.test.messaging.jms.clustering.base.ClusteringTestBase;
 import org.jboss.test.messaging.tools.ServerManagement;
-import org.jboss.test.messaging.jms.clustering.base.ClusteringTestBase;
 
 /**
+ * 
+ * A HATest
+ *
  * @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
- * @version <tt>$Revision:$</tt>
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @version <tt>$Revision: 1.1 $</tt>
  *
- * $Id:$
+ * $Id$
+ *
  */
 public class HATest extends ClusteringTestBase
 {
@@ -65,146 +64,299 @@
    }
 
    // Public --------------------------------------------------------
-
-   public void testConnectionFactoryConnect() throws Exception
+   
+   /*
+    * Test that connections created using a clustered connection factory are created round robin on
+    * different servers
+    */
+   public void testRoundRobinConnectionCreation() throws Exception
    {
+      JBossConnectionFactory factory =  (JBossConnectionFactory )ic1.lookup("/ConnectionFactory");
+      
+      ClusteredClientConnectionFactoryDelegate delegate =
+       (ClusteredClientConnectionFactoryDelegate)factory.getDelegate();
+      
+      log.info ("number of delegates = " + delegate.getDelegates().length);
+      log.info ("number of servers = " + ServerManagement.getServer(0).getNumberOfNodesOnCluster());
+      
+      assertEquals(3, delegate.getDelegates().length);
+      
+      ClientConnectionFactoryDelegate cf1 = delegate.getDelegates()[0];
+      
+      ClientConnectionFactoryDelegate cf2 = delegate.getDelegates()[1];
+      
+      ClientConnectionFactoryDelegate cf3 = delegate.getDelegates()[2];
+      
+      assertEquals(0, cf1.getServerId());
+      
+      assertEquals(1, cf2.getServerId());
+      
+      assertEquals(2, cf3.getServerId());
+      
+      assertEquals(3, ServerManagement.getServer(0).getNumberOfNodesOnCluster());
+      
+      Connection conn1 = null;
+      
+      Connection conn2 = null;
+      
+      Connection conn3 = null;
+      
+      Connection conn4 = null;
+      
+      Connection conn5 = null;
+      
       try
+      {         
+         conn1 = factory.createConnection();
+         
+         conn2 = factory.createConnection();
+         
+         conn3 = factory.createConnection();
+         
+         conn4 = factory.createConnection();
+         
+         conn5 = factory.createConnection();
+         
+         ConnectionState state1 = (ConnectionState)(((DelegateSupport)((JBossConnection)conn1).getDelegate()).getState());
+         
+         ConnectionState state2 = (ConnectionState)(((DelegateSupport)((JBossConnection)conn2).getDelegate()).getState());
+         
+         ConnectionState state3 = (ConnectionState)(((DelegateSupport)((JBossConnection)conn3).getDelegate()).getState());
+         
+         ConnectionState state4 = (ConnectionState)(((DelegateSupport)((JBossConnection)conn4).getDelegate()).getState());
+         
+         ConnectionState state5 = (ConnectionState)(((DelegateSupport)((JBossConnection)conn5).getDelegate()).getState());
+         
+         int serverID1 = state1.getServerID();
+         
+         int serverID2 = state2.getServerID();
+        
+         int serverID3 = state3.getServerID();
+         
+         int serverID4 = state4.getServerID();
+         
+         int serverID5 = state5.getServerID();
+         
+         log.info("server id 1: " + serverID1);
+         
+         log.info("server id 2: " + serverID2);
+         
+         log.info("server id 3: " + serverID3);
+         
+         log.info("server id 4: " + serverID4);
+         
+         log.info("server id 5: " + serverID5);
+         
+         assertEquals(0, serverID1);
+         
+         assertEquals(1, serverID2);
+         
+         assertEquals(2, serverID3);
+         
+         assertEquals(0, serverID4);
+         
+         assertEquals(1, serverID5);
+      }
+      finally
       {
-         JBossConnectionFactory factory =  (JBossConnectionFactory )ic2.lookup("/ConnectionFactory");
-         ClusteredClientConnectionFactoryDelegate delegate =
-                      (ClusteredClientConnectionFactoryDelegate)factory.getDelegate();
-         log.info ("number of delegates = " + delegate.getDelegates().length);
-         log.info ("number of servers = " + ServerManagement.getServer(0).getNumberOfNodesOnCluster());
-
-         delegate.init();
-
-         for (int i = 0; i < 3; i++)
+         if (conn1 != null)
          {
-            int failNode = delegate.getDelegates()[0].getFailoverNode(i);
-            log.info("Failover node for server" + i + " = " + failNode);
-            log.info("InvokerLocator for server " + i + " = " + delegate.getDelegates()[i].getServerLocatorURI());
-
-            assertEquals("Server1 should have the same failoverMapping",
-                         failNode, delegate.getDelegates()[1].getFailoverNode(i));
-            assertEquals("Server2 should have the same failoverMapping",
-                         failNode, delegate.getDelegates()[2].getFailoverNode(i));
+            conn1.close();
          }
-
-         assertEquals(3, ServerManagement.getServer(0).getNumberOfNodesOnCluster());
-         assertEquals(3, delegate.getDelegates().length);
-
-
-         ServerManagement.log(ServerManagement.INFO,"Stopping server 2 as part of testConnectionFactoryConnect");
-         ServerManagement.stop(2,true);
-
-         ServerManagement.log(ServerManagement.INFO,"##### Looking up ConnectionFactory at testConnectionFactoryConnect");
-
-         factory =  (JBossConnectionFactory )ic2.lookup("/ConnectionFactory");
-         delegate = (ClusteredClientConnectionFactoryDelegate)factory.getDelegate();
-
-         assertEquals(2, ServerManagement.getServer(0).getNumberOfNodesOnCluster());
-         assertEquals(2, delegate.getDelegates().length);
+         
+         if (conn2 != null)
+         {
+            conn2.close();
+         }
+         
+         if (conn3 != null)
+         {
+            conn3.close();
+         }
+         
+         if (conn4 != null)
+         {
+            conn4.close();
+         }
+         
+         if (conn5 != null)
+         {
+            conn5.close();
+         }
       }
-      finally
-      {
-         ServerManagement.start("all", 2);
-      }
-
-
+      
    }
-
-
-   public void testTopicSubscriber() throws Exception
+   
+   /*
+    * Test that the failover mapping is created correctly
+    */
+   public void testDefaultFailoverMap() throws Exception
    {
-      try
-      {
-         log.info("++testTopicSubscriber");
+      JBossConnectionFactory factory =  (JBossConnectionFactory )ic1.lookup("/ConnectionFactory");
+      
+      ClusteredClientConnectionFactoryDelegate delegate =
+       (ClusteredClientConnectionFactoryDelegate)factory.getDelegate();
 
+      assertEquals(3, ServerManagement.getServer(0).getNumberOfNodesOnCluster());
+      
+      ClientConnectionFactoryDelegate[] delegates = delegate.getDelegates();
+      
+      int[] failoverIndexes = delegate.getFailoverIndexes();
+      
+      assertEquals(3, delegates.length);
+      
+      assertEquals(3, failoverIndexes.length);
+      
+      // Default failover policy just chooses the node to the right
+      
+      assertEquals(1, failoverIndexes[0]);
+      
+      assertEquals(2, failoverIndexes[1]);
+      
+      assertEquals(0, failoverIndexes[2]);
+      
+   }
+   
 
-         JBossConnectionFactory jbcf1 = (JBossConnectionFactory)cf;
-         assertTrue(jbcf1.getDelegate() instanceof ClusteredClientConnectionFactoryDelegate);
+//   public void testConnectionFactoryConnect() throws Exception
+//   {
+//      try
+//      {
+//         JBossConnectionFactory factory =  (JBossConnectionFactory )ic2.lookup("/ConnectionFactory");
+//         ClusteredClientConnectionFactoryDelegate delegate =
+//                      (ClusteredClientConnectionFactoryDelegate)factory.getDelegate();
+//         log.info ("number of delegates = " + delegate.getDelegates().length);
+//         log.info ("number of servers = " + ServerManagement.getServer(0).getNumberOfNodesOnCluster());
+//
+//         delegate.init();
+//
+//         for (int i = 0; i < 3; i++)
+//         {
+//            int failNode = delegate.getDelegates()[0].getFailoverNode(i);
+//            log.info("Failover node for server" + i + " = " + failNode);
+//            log.info("InvokerLocator for server " + i + " = " + delegate.getDelegates()[i].getServerLocatorURI());
+//
+//            assertEquals("Server1 should have the same failoverMapping",
+//                         failNode, delegate.getDelegates()[1].getFailoverNode(i));
+//            assertEquals("Server2 should have the same failoverMapping",
+//                         failNode, delegate.getDelegates()[2].getFailoverNode(i));
+//         }
+//
+//         assertEquals(3, ServerManagement.getServer(0).getNumberOfNodesOnCluster());
+//         assertEquals(3, delegate.getDelegates().length);
+//
+//
+//         ServerManagement.log(ServerManagement.INFO,"Stopping server 2 as part of testConnectionFactoryConnect");
+//         ServerManagement.stop(2,true);
+//
+//         ServerManagement.log(ServerManagement.INFO,"##### Looking up ConnectionFactory at testConnectionFactoryConnect");
+//
+//         factory =  (JBossConnectionFactory )ic2.lookup("/ConnectionFactory");
+//         delegate = (ClusteredClientConnectionFactoryDelegate)factory.getDelegate();
+//
+//         assertEquals(2, ServerManagement.getServer(0).getNumberOfNodesOnCluster());
+//         assertEquals(2, delegate.getDelegates().length);
+//      }
+//      finally
+//      {
+//         ServerManagement.start("all", 2);
+//      }
+//
+//
+//   }
 
-         log.info(">>Lookup Queue");
-         Destination destination = (Destination) ic2.lookup("topic/testDistributedTopic");
 
-         log.info("Creating connection server1");
-         JBossConnection conn = (JBossConnection) cf.createConnection();
-         conn.setClientID("testClient");
-         conn.start();
+//   public void testTopicSubscriber() throws Exception
+//   {
+//      try
+//      {
+//         log.info("++testTopicSubscriber");
+//
+//
+//         JBossConnectionFactory jbcf1 = (JBossConnectionFactory)cf;
+//         assertTrue(jbcf1.getDelegate() instanceof ClusteredClientConnectionFactoryDelegate);
+//
+//         log.info(">>Lookup Queue");
+//         Destination destination = (Destination) ic2.lookup("topic/testDistributedTopic");
+//
+//         log.info("Creating connection server1");
+//         JBossConnection conn = (JBossConnection) cf.createConnection();
+//         conn.setClientID("testClient");
+//         conn.start();
+//
+//         JBossSession session = (JBossSession) conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
+//         ClientSessionDelegate clientSessionDelegate = (ClientSessionDelegate) session.getDelegate();
+//         SessionState sessionState = (SessionState) clientSessionDelegate.getState();
+//
+//         MessageConsumer consumerHA = session.createDurableSubscriber((Topic) destination, "T1");
+//         JBossMessageConsumer jbossConsumerHA = (JBossMessageConsumer) consumerHA;
+//
+//         org.jboss.jms.client.delegate.ClientConsumerDelegate clientDelegate = (org.jboss.jms.client.delegate.ClientConsumerDelegate) jbossConsumerHA.getDelegate();
+//         ConsumerState consumerState = (ConsumerState) clientDelegate.getState();
+//
+//         log.info("subscriptionName=" + consumerState.getSubscriptionName());
+//
+//
+//         log.info(">>Creating Producer");
+//         MessageProducer producer = session.createProducer(destination);
+//         log.info(">>creating Message");
+//         Message message = session.createTextMessage("Hello Before");
+//         log.info(">>sending Message");
+//         producer.send(message);
+//         session.commit();
+//
+//         receiveMessage("consumerHA", consumerHA, true, false);
+//
+//         session.commit();
+//         //if (true) return;
+//
+//         Object txID = sessionState.getCurrentTxId();
+//
+//         producer.send(session.createTextMessage("Hello again before failover"));
+//
+//         ClientConnectionDelegate delegate = (ClientConnectionDelegate) conn.getDelegate();
+//
+//         ServerManagement.stop(0, false);
+//
+//         Thread.sleep(25000);
+//
+//         //System.out.println("Kill server1"); Thread.sleep(10000);
+//
+//         message = session.createTextMessage("Hello After");
+//         log.info(">>Sending new message");
+//         producer.send(message);
+//
+//         assertEquals(txID, sessionState.getCurrentTxId());
+//         System.out.println("TransactionID on client = " + txID);
+//         log.info(">>Final commit");
+//
+//         /* JBossConnection connSecondServer = (JBossConnection)this.factoryServer2.createConnection();
+//          connSecondServer.start();
+//          JBossSession sessionSecondServer = (JBossSession)connSecondServer.createSession(false,Session.AUTO_ACKNOWLEDGE);
+//          MessageConsumer consumerSecondServer = sessionSecondServer.createConsumer(destination); */
+//
+//         session.commit();
+//
+//         /* receiveMessage("consumerSecondServer",consumerSecondServer,true,false);
+//        receiveMessage("consumerSecondServer",consumerSecondServer,true,false);
+//        receiveMessage("consumerSecondServer",consumerSecondServer,true,true); */
+//
+//         log.info("Calling alternate receiver");
+//         receiveMessage("consumerHA", consumerHA, true, false);
+//         receiveMessage("consumerHA", consumerHA, true, false);
+//         receiveMessage("consumerHA", consumerHA, true, true);
+//
+//
+//         session.commit();
+//
+//      }
+//      finally
+//      {
+//         // restart the server as it was probably stopped (tearDown will need that)
+//         ServerManagement.start("all", 0);
+//      }
+//   }
 
-         JBossSession session = (JBossSession) conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
-         ClientSessionDelegate clientSessionDelegate = (ClientSessionDelegate) session.getDelegate();
-         SessionState sessionState = (SessionState) clientSessionDelegate.getState();
-
-         MessageConsumer consumerHA = session.createDurableSubscriber((Topic) destination, "T1");
-         JBossMessageConsumer jbossConsumerHA = (JBossMessageConsumer) consumerHA;
-
-         org.jboss.jms.client.delegate.ClientConsumerDelegate clientDelegate = (org.jboss.jms.client.delegate.ClientConsumerDelegate) jbossConsumerHA.getDelegate();
-         ConsumerState consumerState = (ConsumerState) clientDelegate.getState();
-
-         log.info("subscriptionName=" + consumerState.getSubscriptionName());
-
-
-         log.info(">>Creating Producer");
-         MessageProducer producer = session.createProducer(destination);
-         log.info(">>creating Message");
-         Message message = session.createTextMessage("Hello Before");
-         log.info(">>sending Message");
-         producer.send(message);
-         session.commit();
-
-         receiveMessage("consumerHA", consumerHA, true, false);
-
-         session.commit();
-         //if (true) return;
-
-         Object txID = sessionState.getCurrentTxId();
-
-         producer.send(session.createTextMessage("Hello again before failover"));
-
-         ClientConnectionDelegate delegate = (ClientConnectionDelegate) conn.getDelegate();
-
-         ServerManagement.stop(0, false);
-
-         Thread.sleep(25000);
-
-         //System.out.println("Kill server1"); Thread.sleep(10000);
-
-         message = session.createTextMessage("Hello After");
-         log.info(">>Sending new message");
-         producer.send(message);
-
-         assertEquals(txID, sessionState.getCurrentTxId());
-         System.out.println("TransactionID on client = " + txID);
-         log.info(">>Final commit");
-
-         /* JBossConnection connSecondServer = (JBossConnection)this.factoryServer2.createConnection();
-          connSecondServer.start();
-          JBossSession sessionSecondServer = (JBossSession)connSecondServer.createSession(false,Session.AUTO_ACKNOWLEDGE);
-          MessageConsumer consumerSecondServer = sessionSecondServer.createConsumer(destination); */
-
-         session.commit();
-
-         /* receiveMessage("consumerSecondServer",consumerSecondServer,true,false);
-        receiveMessage("consumerSecondServer",consumerSecondServer,true,false);
-        receiveMessage("consumerSecondServer",consumerSecondServer,true,true); */
-
-         log.info("Calling alternate receiver");
-         receiveMessage("consumerHA", consumerHA, true, false);
-         receiveMessage("consumerHA", consumerHA, true, false);
-         receiveMessage("consumerHA", consumerHA, true, true);
-
-
-         session.commit();
-
-      }
-      finally
-      {
-         // restart the server as it was probably stopped (tearDown will need that)
-         ServerManagement.start("all", 0);
-      }
-   }
-
 //
 //   public void testQueueHA() throws Exception
 //   {




More information about the jboss-cvs-commits mailing list