[jboss-cvs] JBoss Messaging SVN: r6578 - in branches/Branch_1_4: tests/src/org/jboss/test/messaging/jms/bridge and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Apr 27 10:01:51 EDT 2009


Author: gaohoward
Date: 2009-04-27 10:01:51 -0400 (Mon, 27 Apr 2009)
New Revision: 6578

Modified:
   branches/Branch_1_4/src/main/org/jboss/jms/server/bridge/Bridge.java
   branches/Branch_1_4/tests/src/org/jboss/test/messaging/jms/bridge/ReconnectTest.java
Log:
JBMESSAGING-1543


Modified: branches/Branch_1_4/src/main/org/jboss/jms/server/bridge/Bridge.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/server/bridge/Bridge.java	2009-04-27 13:13:45 UTC (rev 6577)
+++ branches/Branch_1_4/src/main/org/jboss/jms/server/bridge/Bridge.java	2009-04-27 14:01:51 UTC (rev 6578)
@@ -330,27 +330,7 @@
       if (ok)
       {         
          //start the source connection
-         
-         sourceConn.start();
-         
-         started = true;
-         
-         if (maxBatchTime != -1)
-         {
-            if (trace) { log.trace("Starting time checker thread"); }
-                     
-            timeChecker = new BatchTimeChecker();
-            
-            checkerThread = new Thread(timeChecker);
-            
-            batchExpiryTime = System.currentTimeMillis() + maxBatchTime;
-            
-            checkerThread.start();
-            
-            if (trace) { log.trace("Started time checker thread"); }
-         }            
-         
-         if (trace) { log.trace("Started " + this); }
+         startSourceConnectionAndChecker();
       }
       else
       {
@@ -359,6 +339,37 @@
       }
    }
    
+   private synchronized void startSourceConnectionAndChecker() throws Exception
+   {
+         sourceConn.start();
+
+         started = true;
+
+         if (maxBatchTime != -1)
+         {
+            if (checkerThread != null && checkerThread.isAlive()) 
+            {
+               log.warn("The time checker thread is running!");
+            } 
+            else 
+            {
+                if (trace) { log.trace("Starting time checker thread"); }
+
+                timeChecker = new BatchTimeChecker();
+
+                checkerThread = new Thread(timeChecker);
+
+                batchExpiryTime = System.currentTimeMillis() + maxBatchTime;
+
+                checkerThread.start();
+
+                if (trace) { log.trace("Started time checker thread"); }
+            }
+         }
+
+         if (trace) { log.trace("Started " + this); }
+   }
+   
    public synchronized void stop() throws Exception
    {
       if (!started)
@@ -1597,18 +1608,17 @@
          {
             failed = false;
             started = true;
-            
+
             //Start the source connection - note the source connection must not be started before
             //otherwise messages will be received and ignored
-            
-            try
-            {
-               sourceConn.start();
+
+            try {
+                // alsa: if the bridge has failed to start then it must be started here
+                // not only the sourceConn but the whole bridge
+                startSourceConnectionAndChecker();
+            } catch (Exception e) {
+                log.error("Failed to start source connection", e);
             }
-            catch (JMSException e)
-            {
-               log.error("Failed to start source connection", e);
-            }
          }
       }
    }

Modified: branches/Branch_1_4/tests/src/org/jboss/test/messaging/jms/bridge/ReconnectTest.java
===================================================================
--- branches/Branch_1_4/tests/src/org/jboss/test/messaging/jms/bridge/ReconnectTest.java	2009-04-27 13:13:45 UTC (rev 6577)
+++ branches/Branch_1_4/tests/src/org/jboss/test/messaging/jms/bridge/ReconnectTest.java	2009-04-27 14:01:51 UTC (rev 6578)
@@ -22,12 +22,12 @@
 package org.jboss.test.messaging.jms.bridge;
 
 import org.jboss.jms.server.bridge.Bridge;
-import org.jboss.jms.server.bridge.BridgeService;
 import org.jboss.logging.Logger;
 import org.jboss.test.messaging.tools.ServerManagement;
 
 /**
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
  * @version <tt>$Revision: 1.1 $</tt>
  *
  * $Id$
@@ -119,6 +119,12 @@
       testCrashAndReconnectDestBasic(Bridge.QOS_ONCE_AND_ONLY_ONCE, false);
    }
 
+   //https://jira.jboss.org/jira/browse/JBMESSAGING-1543
+   public void testReconnectWithBatchTime_P() throws Exception
+   {
+      this.testCrashOnStartupAndReconnectWithBatchTime(Bridge.QOS_ONCE_AND_ONLY_ONCE, true);
+   }
+
    // dups ok
 
    public void testCrashAndReconnectDestBasic_DuplicatesOk_P() throws Exception
@@ -343,6 +349,77 @@
       }                  
    }
    
+   /*
+    * Create a bridge with both BatchSize and BatchTime enabled
+    * Crash the destination server
+    * Start the bridge, make it run StartupFailureHandler to retry connection
+    * Bring the destination server back up, let the bridge reconnect
+    * Send some 15 messages, not in multiple by BatchSize (10).
+    * Verify all messages are received
+    */
+   private void testCrashOnStartupAndReconnectWithBatchTime(int qosMode, boolean persistence) throws Exception
+   {
+      Bridge bridge = null;
+         
+      try
+      {   
+
+         bridge = new Bridge(false, sourceProps, targetProps, "/queue/sourceQueue", "/queue/targetQueue",
+                             "/ConnectionFactory", "/ConnectionFactory", null, null, null, null,
+                             null, 1000, -1, qosMode, 10, 5000, null, null, false);
+         
+         //Now crash the dest server
+         
+         log.info("About to crash server");
+         
+         ServerManagement.kill(1);
+
+         bridge.start();
+            
+         //Wait a while before starting up to simulate the dest being down for a while
+         log.info("Waiting 5 secs before bringing server back up");
+         Thread.sleep(4000);
+         log.info("Done wait");
+
+         //Restart the server
+         
+         log.info("Restarting server");
+         
+         ServerManagement.start(1, "all", false);
+         
+         ServerManagement.deployQueue("targetQueue", 1);
+         
+         setUpAdministeredObjects();
+
+         final int NUM_MESSAGES = 15;
+         
+         //Send some messages
+         
+         sendMessages(cf0, sourceQueue, 0, NUM_MESSAGES , persistence);
+                  
+         //Wait for batch time checker to start working
+         Thread.sleep(7000);
+         
+         checkMessagesReceived(cf1, targetQueue, qosMode, NUM_MESSAGES, false);
+         
+      }
+      finally
+      {      
+
+         if (bridge != null)
+         {
+            try
+            {
+               bridge.stop();
+            }
+            catch (Exception e)
+            {
+               log.error("Failed to stop bridge", e);
+            }
+         }         
+      }                  
+   }
+   
    // Inner classes -------------------------------------------------------------------
    
 }




More information about the jboss-cvs-commits mailing list