[jboss-cvs] JBoss Messaging SVN: r2876 - in trunk: src/main/org/jboss/messaging/core/impl/postoffice and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jul 11 14:00:52 EDT 2007


Author: timfox
Date: 2007-07-11 14:00:52 -0400 (Wed, 11 Jul 2007)
New Revision: 2876

Modified:
   trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
   trunk/src/main/org/jboss/messaging/core/impl/postoffice/GroupMember.java
   trunk/src/main/org/jboss/messaging/core/impl/postoffice/MessagingPostOffice.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/ChangeFailoverNodeTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterLeakTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterViewUpdateTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusteredConnectionFactoryTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusteringTestBase.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/DisableLoadBalancingAndFailoverTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/FailoverTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/GroupManagementTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/LargeClusterTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/MergeQueueTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/MultiThreadFailoverTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/MultipleFailoverTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/RecoverDeliveriesTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/clustering/XAFailoverTest.java
   trunk/tests/src/org/jboss/test/messaging/jms/stress/clustering/FailoverStressTest.java
   trunk/tests/src/org/jboss/test/messaging/tools/ServerManagement.java
   trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/RMITestServer.java
   trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/StopRMIServer.java
Log:
More fixes to tests and fixes to ServerManagement kill 


Modified: trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -125,7 +125,7 @@
    
    static final String TEMP_QUEUE_MESSAGECOUNTER_PREFIX = "TempQueue.";
    
-   private static final long CLOSE_TIMEOUT = 10 * 10000;
+   private static final long CLOSE_TIMEOUT = 5 * 1000;
       
    // Static ---------------------------------------------------------------------------------------
 
@@ -1163,7 +1163,8 @@
    		
    		if (toWait <= 0)
    		{
-   			while (toDeliver.take() != null) {}
+   			//Clear toDeliver
+   			while (toDeliver.poll(0) != null) {}
    			
    			log.warn("Timed out waiting for response to arrive");
    		}   		   		

Modified: trunk/src/main/org/jboss/messaging/core/impl/postoffice/GroupMember.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/impl/postoffice/GroupMember.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/src/main/org/jboss/messaging/core/impl/postoffice/GroupMember.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -85,7 +85,7 @@
    
    private QueuedExecutor viewExecutor;
    
-   private Object setStateLock = new Object();
+   private Object waitLock = new Object();
 
    //Still needs to be volatile since the ReadWriteLock won't synchronize between threads
    private volatile boolean started;
@@ -155,6 +155,32 @@
       		if (trace) { log.trace(this + " is not the first member of group"); }
       	}
 	      
+	      //Wait for the first view to arrive
+
+      	synchronized (waitLock)
+      	{ 
+   			long timeRemaining = 5000; //Hardcoded for now
+   			
+   			long start = System.currentTimeMillis();
+   			
+      		while (currentView == null && timeRemaining > 0)
+      		{
+      			waitLock.wait(stateTimeout);
+      			
+      			if (currentView == null)
+      			{
+      				long waited = System.currentTimeMillis() - start;
+      				
+      				timeRemaining -= waited;
+      			}
+      		}
+      		
+      		if (currentView == null)
+      		{
+      			throw new IllegalStateException("Timed out waiting for first view to arrive");
+      		}
+      	}
+	      	      
 	   	//Now we can be considered started
 	   	started = true;	   	
    	}
@@ -326,7 +352,7 @@
    	{
    		//We are not the first member of the group, so let's wait for state to be got and processed
    		
-   		synchronized (setStateLock)
+   		synchronized (waitLock)
       	{ 
    			long timeRemaining = stateTimeout;
    			
@@ -334,7 +360,7 @@
    			
       		while (!started && timeRemaining > 0)
       		{
-      			setStateLock.wait(stateTimeout);
+      			waitLock.wait(stateTimeout);
       			
       			if (!started)
       			{
@@ -429,7 +455,7 @@
 
       public void setState(byte[] bytes)
       {
-         synchronized (setStateLock)
+         synchronized (waitLock)
          {
          	try
          	{
@@ -442,7 +468,7 @@
          	
          	started = true;
          	
-            setStateLock.notify();
+            waitLock.notify();
          }
       }
    }

Modified: trunk/src/main/org/jboss/messaging/core/impl/postoffice/MessagingPostOffice.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/impl/postoffice/MessagingPostOffice.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/src/main/org/jboss/messaging/core/impl/postoffice/MessagingPostOffice.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -2928,23 +2928,10 @@
             }
             else
             {
-            	log.debug(this + " did not have a queue: " + queue.getName() + " queue so no need to merge");
+            	//Cannot failover if there is no queue deployed.
             	
-              	Queue newQueue = new MessagingQueue(thisNodeID, queue.getName(), queue.getChannelID(), queue.isRecoverable(),
-              			                              queue.getFilter(), true);
-
-               addBinding(new Binding(condition, newQueue, binding.allNodes), false);
-               
-               newQueue.load();
-               
-               //TODO - do we really want to activate ALL the queues - surely only the ones that correspond to deployed destinations??
-               newQueue.activate();
-
-               //FIXME there is a problem in the above code.
-               //If the server crashes between deleting the binding from the database
-               //and creating the new binding in the database, then the binding will be completely
-               //lost from the database when the server is resurrected.
-               //To remedy, both db operations need to be done in the same JBDC tx
+            	throw new IllegalStateException("Cannot failover " + queue.getName() + " since it does not exist on this node. " + 
+            			                          "You must deploy your clustered destinations on ALL nodes of the cluster");
             }            
          }
 

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/ChangeFailoverNodeTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/ChangeFailoverNodeTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/ChangeFailoverNodeTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -112,146 +112,8 @@
    public void testKillAllToOneAndBackAgainTransactional() throws Exception
    {
    	this.killAllToOneAndBackAgain(true);
-   }
-   
-   public void testFailoverToNodeWithNoQueueDeployed() throws Exception
-   {
-   	JBossConnectionFactory factory = (JBossConnectionFactory) ic[0].lookup("/ClusteredConnectionFactory");
-
-      Connection conn3 = createConnectionOnServer(factory, 3);
- 
-      try
-      {
-      	SimpleFailoverListener failoverListener = new SimpleFailoverListener();
-         ((JBossConnection)conn3).registerFailoverListener(failoverListener);
-      	
-         Session sessSend = conn3.createSession(false, Session.AUTO_ACKNOWLEDGE);
-      		
-      	MessageProducer prod2 = sessSend.createProducer(queue[2]);
-      	
-      	final int numMessages = 10;
-      	
-      	for (int i = 0; i < numMessages; i++)
-      	{
-      		TextMessage tm = sessSend.createTextMessage("message" + i);
-      		
-      		prod2.send(tm);      		
-      	}
-      	
-      	Session sess3 = conn3.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-      	
-      	MessageConsumer cons3 = sess3.createConsumer(queue[3]);
-            	
-      	conn3.start();
-      	
-      	TextMessage tm = null;
-      	
-      	for (int i = 0; i < numMessages; i++)
-      	{
-      		tm = (TextMessage)cons3.receive(2000);
-      		
-      		assertNotNull(tm);
-      		
-      		assertEquals("message" + i, tm.getText());
-      	}
-      	
-      	//Don't ack
-      	
-      	int failoverNodeId = this.getFailoverNodeForNode(factory, 3);
-      	
-      	log.info("Failover node for node 3 is " + failoverNodeId);
-      	
-      	dumpFailoverMap(ServerManagement.getServer(3).getFailoverMap());
-      	
-      	//We now add a new node - this should cause the failover node to change
-      	
-         ServerManagement.start(4, "all", false);
-         
-         //DO NOT deploy the queue on it
-         
-         Thread.sleep(5000);
-         
-         dumpFailoverMap(ServerManagement.getServer(3).getFailoverMap());
-      	
-         int newFailoverNodeId = this.getFailoverNodeForNode(factory, 3);
-         
-         log.info("New failover node is " + newFailoverNodeId);
-         
-         assertTrue(failoverNodeId != newFailoverNodeId);
-         
-         //Now kill the node
-      	
-         // The queue does not exist on the new node so it tests the case where queue merging DOES NOT occur
-         
-         ServerManagement.kill(3);
-
-         log.info("########");
-         log.info("######## KILLED NODE 3");
-         log.info("########");
-
-         // wait for the client-side failover to complete
-
-         log.info("Waiting for failover to complete");
-         
-         while(true)
-         {
-            FailoverEvent event = failoverListener.getEvent(120000);
-            if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
-            {
-               break;
-            }
-            if (event == null)
-            {
-               fail("Did not get expected FAILOVER_COMPLETED event");
-            }
-         }
-         
-         log.info("Failover completed");
-         
-         assertEquals(newFailoverNodeId, getServerId(conn3));
-                  
-         //Now ack
-         
-         tm.acknowledge();
-         
-         
-         log.info("acked");
-         
-         sess3.close();
-         
-         log.info("closed");
-         
-	      sess3 = conn3.createSession(false, Session.AUTO_ACKNOWLEDGE);
-	      
-	      log.info("created new session");
-      	
-      	cons3 = sess3.createConsumer(queue[3]);
-      	
-      	log.info("Created consumer");
-      	
-         //Messages should be gone
-      	
-         tm = (TextMessage)cons3.receive(5000);
-      		
-      	assertNull(tm);      		
-      }
-      finally
-      {
-         if (conn3 != null)
-         {
-            conn3.close();
-         }
-         
-         try
-         {
-         	ServerManagement.stop(4);
-         }
-         catch (Exception e)
-         {}
-      }
-   }
-  
-   
+   }   
+     
    // Package protected ---------------------------------------------
    
    // Protected -----------------------------------------------------
@@ -266,7 +128,7 @@
    }
    
    protected void tearDown() throws Exception
-   {
+   {   	   	
       super.tearDown();
    }
    
@@ -407,7 +269,7 @@
          
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -465,6 +327,13 @@
          {
             conn0.close();
          }
+         
+         // Since we kill the rmi server in this test, we must kill the other servers too
+      	
+      	for (int i = nodeCount - 1; i >= 0; i--)
+      	{
+      		ServerManagement.kill(i);
+      	}
       }
    }
    
@@ -575,7 +444,7 @@
          
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -632,6 +501,13 @@
          {
             conn0.close();
          }
+         
+         //  Since we kill the rmi server in this test, we must kill the other servers too
+      	
+      	for (int i = nodeCount - 1; i >= 0; i--)
+      	{
+      		ServerManagement.kill(i);
+      	}
       }
    }
    
@@ -743,7 +619,7 @@
          
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -901,7 +777,7 @@
          
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -1045,7 +921,7 @@
          
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterLeakTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterLeakTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterLeakTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -154,7 +154,7 @@
 
          // kill node 1
 
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(1);
          log.info("########");
          log.info("######## KILLED NODE 1");
          log.info("########");

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterViewUpdateTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterViewUpdateTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusterViewUpdateTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -71,7 +71,7 @@
       assertEquals(1, getServerId(conn1));
 
       log.info("*** killing server");
-      ServerManagement.killAndWait(1);
+      ServerManagement.kill(1);
       log.info("killed server");
 
       log.info("sleeping 5 secs ...");
@@ -125,7 +125,7 @@
       assertEquals(1, getServerId(conn1));
       assertEquals(1, getServerId(httpConn1));
 
-      ServerManagement.killAndWait(1);
+      ServerManagement.kill(1);
 
       log.info("sleeping 5 secs ...");
       Thread.sleep(5000);
@@ -179,7 +179,7 @@
       // Disable Leasing for Failover
       state.getRemotingConnection().removeConnectionListener();
 
-      ServerManagement.killAndWait(1);
+      ServerManagement.kill(1);
 
       Thread.sleep(10000);
 

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusteredConnectionFactoryTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusteredConnectionFactoryTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusteredConnectionFactoryTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -56,9 +56,9 @@
    {
       try
       {
-         ServerManagement.killAndWait(0);
-         ServerManagement.killAndWait(1);
-         ServerManagement.killAndWait(2);
+         ServerManagement.kill(0);
+         ServerManagement.kill(1);
+         ServerManagement.kill(2);
 
          try
          {
@@ -84,8 +84,8 @@
 
       try
       {
-         ServerManagement.killAndWait(0);
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(0);
+         ServerManagement.kill(1);
 
          assertNotNull(((JBossConnectionFactory)cf).getDelegate().getClientAOPStack());
 
@@ -105,7 +105,7 @@
             }
          }
 
-         ServerManagement.killAndWait(2);
+         ServerManagement.kill(2);
          // need to re-start 0, it's the RMI server the other servers use
          ServerManagement.start(0, "all", true);
       }
@@ -121,7 +121,7 @@
          conn.close();
          conn = null;
 
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(1);
          conn = cf.createConnection();
 
          assertEquals(2, getServerId(conn));
@@ -172,8 +172,8 @@
          conn = createConnectionOnServer(cf, 0);
          conn.close();
 
-         ServerManagement.killAndWait(1);
-         ServerManagement.killAndWait(2);
+         ServerManagement.kill(1);
+         ServerManagement.kill(2);
          conn = cf.createConnection();
 
          assertEquals(0, getServerId(conn));
@@ -196,8 +196,8 @@
          conn = createConnectionOnServer(cf, 0);
          conn.close();
 
-         ServerManagement.killAndWait(1);
-         ServerManagement.killAndWait(2);
+         ServerManagement.kill(1);
+         ServerManagement.kill(2);
          conn = cf.createConnection();
 
          assertEquals(0, getServerId(conn));

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusteringTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusteringTestBase.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/ClusteringTestBase.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -130,6 +130,7 @@
 
       for (int i = 0; i < nodeCount; i++)
       {
+      	log.info("Getting lookups for " + i);
          ic[i] = new InitialContext(ServerManagement.getJNDIEnvironment(i));
          queue[i] = (Queue)ic[i].lookup("queue/testDistributedQueue");
          topic[i] = (Topic)ic[i].lookup("topic/testDistributedTopic");
@@ -203,7 +204,7 @@
 
       while (true)
       {
-      	FailoverEvent event = failoverListener.getEvent(120000);
+      	FailoverEvent event = failoverListener.getEvent(30000);
       	if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
       	{
       		break;

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/DisableLoadBalancingAndFailoverTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/DisableLoadBalancingAndFailoverTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/DisableLoadBalancingAndFailoverTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -343,7 +343,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/FailoverTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/FailoverTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/FailoverTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -74,7 +74,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -127,7 +127,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -198,7 +198,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -268,7 +268,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -340,7 +340,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -409,7 +409,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -475,7 +475,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -575,7 +575,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -658,7 +658,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -743,7 +743,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -831,7 +831,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -922,7 +922,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -1009,7 +1009,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -1096,7 +1096,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -1179,7 +1179,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -1236,19 +1236,19 @@
          log.info("######## KILLED NODE 1");
          log.info("########");
 
-         FailoverEvent event = failoverListener.getEvent(120000);
+         FailoverEvent event = failoverListener.getEvent(30000);
 
          assertNotNull(event);
          assertEquals(FailoverEvent.FAILURE_DETECTED, event.getType());
          log.info("got " + event);
 
-         event = failoverListener.getEvent(120000);
+         event = failoverListener.getEvent(30000);
 
          assertNotNull(event);
          assertEquals(FailoverEvent.FAILOVER_STARTED, event.getType());
          log.info("got " + event);
 
-         event = failoverListener.getEvent(120000);
+         event = failoverListener.getEvent(30000);
 
          assertNotNull(event);
          assertEquals(FailoverEvent.FAILOVER_COMPLETED, event.getType());
@@ -1298,7 +1298,7 @@
 
          while(true)
          {
-            FailoverEvent event = listener.getEvent(120000);
+            FailoverEvent event = listener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_STARTED == event.getType())
             {
                break;
@@ -1422,7 +1422,7 @@
             getDelegate()).getRemotingConnection();
          rc.removeConnectionListener();
 
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(1);
 
          log.info("########");
          log.info("######## KILLED NODE 1");
@@ -1506,7 +1506,7 @@
 
          // kill node 1
 
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(1);
          log.info("########");
          log.info("######## KILLED NODE 1");
          log.info("########");
@@ -1635,7 +1635,7 @@
 
          MessageConsumer consumer = session1.createConsumer(queue[1]);
 
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(1);
 
          consumer.close();
       }
@@ -1675,7 +1675,7 @@
 
          QueueBrowser browser = session1.createBrowser(queue[1]);
 
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(1);
 
          browser.close();
       }
@@ -1713,7 +1713,7 @@
 
          Session session = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(1);
 
          session.close();
       }
@@ -1748,7 +1748,7 @@
             getDelegate()).getRemotingConnection();
          rc.removeConnectionListener();
 
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(1);
 
          conn1.close();
       }
@@ -1830,7 +1830,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -1948,7 +1948,7 @@
 
          // kill node 1
 
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(1);
          log.info("########");
          log.info("######## KILLED NODE 1");
          log.info("########");

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/GroupManagementTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/GroupManagementTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/GroupManagementTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -67,7 +67,7 @@
 
          log.info("Blocking to receive notification ...");
 
-         if (!listener.viewChanged(120000))
+         if (!listener.viewChanged(30000))
          {
             fail("Did not receive view change!");
          }
@@ -255,7 +255,7 @@
 
          // Wait for membership change notification
 
-         if (!clusterEvent.viewChanged(120000))
+         if (!clusterEvent.viewChanged(30000))
          {
             fail("Did not receive view change after killing server 2!");
          }
@@ -303,7 +303,7 @@
 
          // Wait for FAILOVER_COMPLETED notification
 
-         if (!clusterEvent.failoverCompleted(120000))
+         if (!clusterEvent.failoverCompleted(30000))
          {
             fail("Did not receive a FAILOVER_COMPLETED event after killing server 2!");
          }
@@ -325,7 +325,7 @@
 
          // Wait for FAILOVER_COMPLETED notification
 
-         if (!clusterEvent.failoverCompleted(120000))
+         if (!clusterEvent.failoverCompleted(30000))
          {
             fail("Did not receive a FAILOVER_COMPLETED event after killing server 1!");
          }
@@ -367,7 +367,7 @@
          // start the ninth node, as there is no chance to be started by scripts
          ServerManagement.start(9, "all");
 
-         if (!clusterEvent.viewChanged(120000))
+         if (!clusterEvent.viewChanged(30000))
          {
             fail("Did not receive a VIEW_CHANGED event after spawning new server!");
          }

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/LargeClusterTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/LargeClusterTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/LargeClusterTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -74,7 +74,7 @@
 
       // wait for change to propagate
 
-      if (!clusterEvent.viewChanged(120000))
+      if (!clusterEvent.viewChanged(30000))
       {
          fail("Did not receive a VIEW_CHANGED event after spawning new server!");
       }
@@ -125,7 +125,7 @@
 
       ServerManagement.stop(3);
 
-      if (!clusterEvent.viewChanged(120000))
+      if (!clusterEvent.viewChanged(30000))
       {
          fail("Did not receive a VIEW_CHANGED event after spawning new server!");
       }
@@ -140,7 +140,7 @@
 
       ServerManagement.stop(6);
 
-      if (!clusterEvent.viewChanged(120000))
+      if (!clusterEvent.viewChanged(30000))
       {
          fail("Did not receive a VIEW_CHANGED event after spawning new server!");
       }
@@ -154,7 +154,7 @@
 
       ServerManagement.stop(1);
 
-      if (!clusterEvent.viewChanged(120000))
+      if (!clusterEvent.viewChanged(30000))
       {
          fail("Did not receive a VIEW_CHANGED event after spawning new server!");
       }
@@ -167,7 +167,7 @@
 
       ServerManagement.stop(2);
 
-      if (!clusterEvent.viewChanged(120000))
+      if (!clusterEvent.viewChanged(30000))
       {
          fail("Did not receive a VIEW_CHANGED event after spawning new server!");
       }
@@ -179,7 +179,7 @@
 
       ServerManagement.stop(4);
 
-      if (!clusterEvent.viewChanged(120000))
+      if (!clusterEvent.viewChanged(30000))
       {
          fail("Did not receive a VIEW_CHANGED event after spawning new server!");
       }
@@ -193,7 +193,7 @@
 
       ServerManagement.stop(0);
 
-      if (!clusterEvent.viewChanged(120000))
+      if (!clusterEvent.viewChanged(30000))
       {
          fail("Did not receive a VIEW_CHANGED event after spawning new server!");
       }
@@ -231,7 +231,7 @@
 
       ServerManagement.stop(0);
 
-      if (!clusterEvent.viewChanged(120000))
+      if (!clusterEvent.viewChanged(30000))
       {
          fail("Did not receive a VIEW_CHANGED event after spawning new server!");
       }
@@ -251,7 +251,7 @@
 
       ServerManagement.start(0, "all");
 
-      if (!clusterEvent.viewChanged(120000))
+      if (!clusterEvent.viewChanged(30000))
       {
          fail("Did not receive a VIEW_CHANGED event after spawning new server!");
       }

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/MergeQueueTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/MergeQueueTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/MergeQueueTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -17,7 +17,6 @@
 import javax.jms.Session;
 import javax.jms.TextMessage;
 
-import org.jboss.jms.client.JBossConnection;
 import org.jboss.test.messaging.tools.ServerManagement;
 
 /**
@@ -108,7 +107,7 @@
          //At this point there should be 5 messages on the node 0 queue (5-9)
          //and 10 messages on the node 1 queue (10-19)
          
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(1);
 
          consumer0 = session0.createConsumer(queue[0]);
 
@@ -221,7 +220,7 @@
          Thread.sleep(5000);
 
          log.info("Killing node1");
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(1);
          log.info("Killed node1");
 
          // close the consumer .. .and this should cause failover to kick in

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/MultiThreadFailoverTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/MultiThreadFailoverTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/MultiThreadFailoverTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -105,7 +105,7 @@
 
       MessageProducer producer = session.createProducer(queue[1]);
 
-      ServerManagement.killAndWait(1);
+      ServerManagement.kill(1);
 
       producer.send(session.createTextMessage("Have a nice day!"));
 
@@ -383,7 +383,7 @@
 
 
 
-         ServerManagement.killAndWait(1);
+         ServerManagement.kill(1);
 
          int producedRightAfterKill;
          int consumedRightAfterKill;

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/MultipleFailoverTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/MultipleFailoverTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/MultipleFailoverTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -71,9 +71,8 @@
 
       try
       {
-         // we start with a cluster of two (server 0 and server 1)
 
-         conn = this.createConnectionOnServer(cf, 0);
+         conn = this.createConnectionOnServer(cf, 1);
          conn.start();
 
          // send/receive message
@@ -85,12 +84,12 @@
          assertNotNull(m);
          assertEquals("step1", m.getText());
 
-         log.info("killing node 0 ....");
+         log.info("killing node 1 ....");
 
-         ServerManagement.kill(0);
+         ServerManagement.kill(1);
 
          log.info("########");
-         log.info("######## KILLED NODE 0");
+         log.info("######## KILLED NODE 1");
          log.info("########");
 
          // send/receive message
@@ -100,11 +99,11 @@
          assertEquals("step2", m.getText());
 
          log.info("########");
-         log.info("######## STARTING NODE 2");
+         log.info("######## STARTING NODE 3");
          log.info("########");
 
-         ServerManagement.start(2, "all", false);
-         ServerManagement.deployQueue("testDistributedQueue", 2);
+         ServerManagement.start(3, "all", false);
+         ServerManagement.deployQueue("testDistributedQueue", 3);
 
          // send/receive message
          prod.send(s.createTextMessage("step3"));
@@ -112,12 +111,12 @@
          assertNotNull(m);
          assertEquals("step3", m.getText());
 
-         log.info("killing node 1 ....");
+         log.info("killing node 2 ....");
 
-         ServerManagement.kill(1);
+         ServerManagement.kill(2);
 
          log.info("########");
-         log.info("######## KILLED NODE 1");
+         log.info("######## KILLED NODE 2");
          log.info("########");
 
          // send/receive message
@@ -127,12 +126,12 @@
          assertEquals("step4", m.getText());
 
          log.info("########");
-         log.info("######## STARTING NODE 3");
+         log.info("######## STARTING NODE 4");
          log.info("########");
 
-         ServerManagement.start(3, "all", false);
-         log.info("deploying queue on3");
-         ServerManagement.deployQueue("testDistributedQueue", 3);
+         ServerManagement.start(4, "all", false);
+         log.info("deploying queue on4");
+         ServerManagement.deployQueue("testDistributedQueue", 4);
          log.info("deployed it");
 
          // send/receive message
@@ -141,12 +140,12 @@
          assertNotNull(m);
          assertEquals("step5", m.getText());
 
-         log.info("killing node 2 ....");
+         log.info("killing node 3 ....");
 
-         ServerManagement.kill(2);
+         ServerManagement.kill(3);
 
          log.info("########");
-         log.info("######## KILLED NODE 2");
+         log.info("######## KILLED NODE 3");
          log.info("########");
 
          // send/receive message
@@ -156,11 +155,11 @@
          assertEquals("step6", m.getText());
 
          log.info("########");
-         log.info("######## STARTING NODE 0");
+         log.info("######## STARTING NODE 1");
          log.info("########");
 
-         ServerManagement.start(0, "all", false);
-         ServerManagement.deployQueue("testDistributedQueue", 0);
+         ServerManagement.start(1, "all", false);
+         ServerManagement.deployQueue("testDistributedQueue", 1);
 
          // send/receive message
          prod.send(s.createTextMessage("step7"));
@@ -168,12 +167,12 @@
          assertNotNull(m);
          assertEquals("step7", m.getText());
 
-         log.info("killing node 3 ....");
+         log.info("killing node 4 ....");
 
-         ServerManagement.kill(3);
+         ServerManagement.kill(4);
 
          log.info("########");
-         log.info("######## KILLED NODE 3");
+         log.info("######## KILLED NODE 4");
          log.info("########");
 
          // send/receive message
@@ -202,7 +201,7 @@
 
       try
       {
-         conn = this.createConnectionOnServer(cf, 0);
+         conn = this.createConnectionOnServer(cf, 1);
 
          Session sessSend = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -243,7 +242,7 @@
             count++;
          }
               
-         t.join();
+         t.join(5 * 60 * 60 * 1000);
          
          if (killer.failed)
          {
@@ -285,13 +284,7 @@
          throw e;
       }
       finally
-      {
-         if (!ServerManagement.isStarted(0))
-         {
-            ServerManagement.start(0, "all", false);
-         }
-         
-         
+      {         
          if (conn != null)
          {
             log.info("closing connection");
@@ -313,7 +306,7 @@
 
    protected void setUp() throws Exception
    {
-      nodeCount = 2;
+      nodeCount = 3;
 
       super.setUp();
 
@@ -346,17 +339,28 @@
          {                                     
             Thread.sleep(10000);
                
-            log.info("Killing server 0");
-            ServerManagement.kill(0);
+            log.info("Killing server 1");
+            ServerManagement.kill(1);
             
             Thread.sleep(5000);
             
-            log.info("starting server 0");
-            ServerManagement.start(0, "all", false);
-            ServerManagement.deployQueue("testDistributedQueue", 0);
+            log.info("starting server 1");
+            ServerManagement.start(1, "all", false);
+            ServerManagement.deployQueue("testDistributedQueue", 1);
             
             Thread.sleep(5000);
             
+            log.info("Killing server 2");
+            ServerManagement.kill(2);
+            
+            Thread.sleep(5000);
+            
+            log.info("Starting server 2");
+            ServerManagement.start(2, "all", false);
+            ServerManagement.deployQueue("testDistributedQueue", 2);
+            
+            Thread.sleep(5000);
+            
             log.info("Killing server 1");
             ServerManagement.kill(1);
             
@@ -368,14 +372,14 @@
             
             Thread.sleep(5000);
             
-            log.info("Killing server 0");
-            ServerManagement.kill(0);
+            log.info("Killing server 2");
+            ServerManagement.kill(2);
             
             Thread.sleep(5000);
             
-            log.info("Starting server 0");
-            ServerManagement.start(0, "all", false);
-            ServerManagement.deployQueue("testDistributedQueue", 0);
+            log.info("Starting server 2");
+            ServerManagement.start(2, "all", false);
+            ServerManagement.deployQueue("testDistributedQueue", 2);
             
             Thread.sleep(5000);
             
@@ -388,17 +392,6 @@
             ServerManagement.start(1, "all", false);
             ServerManagement.deployQueue("testDistributedQueue", 1);
             
-            Thread.sleep(5000);
-            
-            log.info("Killing server 0");
-            ServerManagement.kill(0);
-            
-            Thread.sleep(5000);
-            
-            log.info("Starting server 0");
-            ServerManagement.start(0, "all", false);
-            ServerManagement.deployQueue("testDistributedQueue", 0);
-            
             log.info("killer DONE");
          }
          catch (Exception e)

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/RecoverDeliveriesTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/RecoverDeliveriesTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/RecoverDeliveriesTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -373,7 +373,7 @@
          
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -519,7 +519,7 @@
          
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -735,7 +735,7 @@
          
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -973,7 +973,7 @@
          
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;

Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/XAFailoverTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/XAFailoverTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/XAFailoverTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -122,7 +122,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -229,7 +229,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -373,7 +373,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -563,7 +563,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -756,7 +756,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;
@@ -984,7 +984,7 @@
 
          while(true)
          {
-            FailoverEvent event = failoverListener.getEvent(120000);
+            FailoverEvent event = failoverListener.getEvent(30000);
             if (event != null && FailoverEvent.FAILOVER_COMPLETED == event.getType())
             {
                break;

Modified: trunk/tests/src/org/jboss/test/messaging/jms/stress/clustering/FailoverStressTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/stress/clustering/FailoverStressTest.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/jms/stress/clustering/FailoverStressTest.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -174,7 +174,7 @@
 
       int serverId = getServerId(connections[0]);
 
-      ServerManagement.killAndWait(serverId);
+      ServerManagement.kill(serverId);
 
       log.info("killed node " + serverId + ", now waiting for all connections to fail over");
       

Modified: trunk/tests/src/org/jboss/test/messaging/tools/ServerManagement.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/ServerManagement.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/tools/ServerManagement.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -135,8 +135,10 @@
     */
    public static synchronized Server create(int i) throws Exception
    {
+   	log.info("Attempting to create server " + i);
       if (servers[i] == null)
       {
+      	log.info("Server not already created, so creating...");
          if (isLocal())
          {
             servers[i] = new ServerHolder(new LocalTestServer(i), false);
@@ -156,6 +158,10 @@
             }
          }
       }
+      else
+      {
+      	log.info("Server already created, so skipping");
+      }
 
       return servers[i].getServer();
    }
@@ -198,10 +204,10 @@
                                          boolean clearDatabase,
                                          boolean startMessagingServer) throws Exception
    {
+      log.info("Attempting to start server " + i);
+   	
       Server s = create(i);
 
-      log.info("starting server " + i);
-
       s.start(config, attrOverrides, clearDatabase, startMessagingServer);
 
       log.info("server " + i + " started");
@@ -256,51 +262,58 @@
    }
 
    /**
-    * Abruptly kills the VM running the specified server, simulating a crash. A local server
-    * cannot be killed, the method is a noop if this is the case.
+    * Kills the server and waits keep trying any dumb communication until the server is effectively
+    * killed. We had to implement this method as kill will actually schedule a thread that will
+    * perform System.exit after few milliseconds. We will use this method in places where we need
+    * the server killed.
     */
    public static synchronized void kill(int i) throws Exception
    {
-      if (servers[i] == null)
+   	log.info("Attempting to kill server " + i);
+   	
+   	ServerHolder holder = servers[i];
+
+      if (holder == null)
       {
-         log.warn("server " + i + " has not been created, so it cannot be killed");
+         log.info("server " + i + " has not been created or has already been killed, so it cannot be killed");
       }
       else
       {
-         log.trace("invoking kill() on server " + i);
-         servers[i].getServer().kill();
-         log.info("server " + i + " killed");
+         Server server = servers[i].getServer();
+         log.info("invoking kill() on server " + i);
+         try
+         {
+         	server.kill();
+         }
+         catch (Throwable t)
+         {
+         	// This is likely to throw an exception since the server dies before the response is received
+         }         
          servers[i] = null;
-      }
-   }
-
-   /**
-    * Kills the server and waits keep trying any dumb communication until the server is effectively
-    * killed. We had to implement this method as kill will actually schedule a thread that will
-    * perform System.exit after few milliseconds. We will use this method in places where we need
-    * the server killed.
-    */
-   public static synchronized void killAndWait(int i) throws Exception
-   {
-      Server server = servers[i].getServer();
-      kill(i);
-      try
-      {
-         while(true)
+         
+         log.info("Waiting for server to die");
+         
+         try
          {
-            server.ping();
-            log.debug("server " + i + " still alive ...");
-            Thread.sleep(10);
+            while(true)
+            {
+               server.ping();
+               log.debug("server " + i + " still alive ...");
+               Thread.sleep(100);
+            }
          }
+         catch (Throwable e)
+         {
+            //Ok
+         }
+         
+         Thread.sleep(300);
+
+         log.info("server " + i + " killed and dead");
       }
-      catch (Throwable e)
-      {
-        // e.printStackTrace();
-      }
-
-      log.debug("server " + i + " killed and dead");
+      
    }
-
+   
    /**
     * This method make sure that all servers that have been implicitely spawned when as a side
     * effect of create() and/or start() are killed. The method is important because a forked
@@ -323,8 +336,14 @@
          {
             Server s = servers[i].getServer();
             destroyed.add(new Integer(s.getServerID()));
-            s.stop();
-            s.kill();
+
+            try
+            {
+            	s.kill();
+            }
+            catch (Throwable t)
+            {            	
+            }
             servers[i] = null;
          }
       }

Modified: trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/RMITestServer.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/RMITestServer.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/RMITestServer.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -179,8 +179,18 @@
 
    public synchronized void kill() throws Exception
    {
-      // Kills the server without doing any graceful shutdown. For graceful shutdown use stop().
-      new Thread(new VMKiller(), "VM Killer").start();
+      //We deregister in another thread, them pause, then kill the VM
+   	//This ensures if the deregister hangs (which can happen if the RMI registry is dead) then it doesn't prevent
+   	//the kill
+   	//We always kill on this thread to ensure the kill completes in a timely manner which may not occur if it occurs
+   	//on its own thread due to thread scheduling differences
+      new Thread(new Deregisterer(), "Deregisterer").start();
+      
+      log.info("Killing VM!!!!");
+      
+      Thread.sleep(250);
+      
+      System.exit(1);
    }
 
    public void ping() throws Exception
@@ -510,11 +520,11 @@
 
    // Inner classes -------------------------------------------------
 
-   public class VMKiller implements Runnable
+   public class Deregisterer implements Runnable
    {
       public void run()
       {
-         log.info("shutting down the VM");
+         log.info("Deregistering from RMI");
 
          try
          {
@@ -525,26 +535,26 @@
             String name = RMI_SERVER_PREFIX + server.getServerID();
             registry.unbind(name);
             log.info("unregistered " + name + " from registry");
-
-            name = NAMING_SERVER_PREFIX + server.getServerID();
-            registry.unbind(name);
-            log.info("unregistered " + name + " from registry");
          }
-         catch(Exception e)
+         catch (Throwable t)
          {
-            log.error("Failed to unregister", e);
+         	log.error("Failed to unregister", t);
          }
-
+         
          try
          {
-            Thread.sleep(250);
+            // unregister myself from the RMI registry
+
+            Registry registry = LocateRegistry.getRegistry(DEFAULT_REGISTRY_PORT);
+
+            String name = NAMING_SERVER_PREFIX + server.getServerID();
+            registry.unbind(name);
+            log.info("unregistered " + name + " from registry");
          }
-         catch(Exception e)
+         catch (Throwable t)
          {
-            log.warn("interrupted while sleeping", e);
-         }
-
-         System.exit(0);
+         	log.error("Failed to unregister", t);
+         }                 
       }
    }
 }

Modified: trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/StopRMIServer.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/StopRMIServer.java	2007-07-11 17:38:33 UTC (rev 2875)
+++ trunk/tests/src/org/jboss/test/messaging/tools/jmx/rmi/StopRMIServer.java	2007-07-11 18:00:52 UTC (rev 2876)
@@ -86,9 +86,13 @@
          return;
       }
 
-      // We should shut down cleanly - not kill the process like we are currently doing
-      
-      server.kill();
+      try
+      {
+      	server.kill();
+      }
+      catch (Throwable t)
+      {      	
+      }
 
       // The last RMI server will take with it the registry too
 




More information about the jboss-cvs-commits mailing list