You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ri...@apache.org on 2007/11/26 18:49:07 UTC

svn commit: r598360 - in /incubator/qpid/branches/M2.1/java: client/src/main/java/org/apache/qpid/jms/failover/ systests/src/main/java/org/apache/qpid/server/failover/

Author: ritchiem
Date: Mon Nov 26 09:49:05 2007
New Revision: 598360

URL: http://svn.apache.org/viewvc?rev=598360&view=rev
Log:
QPID-690 : Missing Test and code update.

Added:
    incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/failover/
    incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/failover/FailoverMethodTest.java   (with props)
Modified:
    incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverRoundRobinServers.java
    incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverSingleServer.java

Modified: incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverRoundRobinServers.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverRoundRobinServers.java?rev=598360&r1=598359&r2=598360&view=diff
==============================================================================
--- incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverRoundRobinServers.java (original)
+++ incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverRoundRobinServers.java Mon Nov 26 09:49:05 2007
@@ -115,6 +115,8 @@
 
     public BrokerDetails getNextBrokerDetails()
     {
+        boolean doDelay = false;
+
         if (_currentBrokerIndex == (_connectionDetails.getBrokerCount() - 1))
         {
             if (_currentServerRetry < _serverRetries)
@@ -130,6 +132,7 @@
                 else
                 {
                     _logger.info("Retrying " + _connectionDetails.getBrokerDetails(_currentBrokerIndex));
+                    doDelay=true;
                 }
 
                 _currentServerRetry++;
@@ -162,6 +165,7 @@
                 else
                 {
                     _logger.info("Retrying " + _connectionDetails.getBrokerDetails(_currentBrokerIndex));
+                    doDelay=true;
                 }
 
                 _currentServerRetry++;
@@ -179,9 +183,10 @@
         BrokerDetails broker = _connectionDetails.getBrokerDetails(_currentBrokerIndex);
 
         String delayStr = broker.getOption(BrokerDetails.OPTIONS_CONNECT_DELAY);
-        if (delayStr != null)
+        if (delayStr != null && doDelay)
         {
             Long delay = Long.parseLong(delayStr);
+            _logger.info("Delay between connect retries:" + delay);
             try
             {
                 Thread.sleep(delay);
@@ -190,6 +195,10 @@
             {
                 return null;
             }
+        }
+        else
+        {
+            _logger.info("No delay between connect retries, use tcp://host:port?connectdelay='value' to enable.");
         }
 
         return broker;

Modified: incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverSingleServer.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverSingleServer.java?rev=598360&r1=598359&r2=598360&view=diff
==============================================================================
--- incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverSingleServer.java (original)
+++ incubator/qpid/branches/M2.1/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverSingleServer.java Mon Nov 26 09:49:05 2007
@@ -22,25 +22,23 @@
 
 import org.apache.qpid.jms.BrokerDetails;
 import org.apache.qpid.jms.ConnectionURL;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class FailoverSingleServer implements FailoverMethod
 {
+    private static final Logger _logger = LoggerFactory.getLogger(FailoverSingleServer.class);
+
     /** The default number of times to rety a conection to this server */
     public static final int DEFAULT_SERVER_RETRIES = 1;
 
-    /**
-     * The details of the Single Server
-     */
+    /** The details of the Single Server */
     private BrokerDetails _brokerDetail;
 
-    /**
-     * The number of times to retry connecting to the sever
-     */
+    /** The number of times to retry connecting to the sever */
     private int _retries;
 
-    /**
-     * The current number of attempts made to the server
-     */
+    /** The current number of attempts made to the server */
     private int _currentRetries;
 
 
@@ -78,7 +76,7 @@
 
     public BrokerDetails getCurrentBrokerDetails()
     {
-       return _brokerDetail;
+        return _brokerDetail;
     }
 
     public BrokerDetails getNextBrokerDetails()
@@ -91,21 +89,24 @@
         {
             if (_currentRetries < _retries)
             {
-                _currentRetries ++;
+                _currentRetries++;
             }
         }
 
 
         String delayStr = _brokerDetail.getOption(BrokerDetails.OPTIONS_CONNECT_DELAY);
-        if (delayStr != null)
+        if (delayStr != null && _currentRetries != 1)
         {
             Long delay = Long.parseLong(delayStr);
+            _logger.info("Delay between connect retries:" + delay);
             try
             {
+
                 Thread.sleep(delay);
             }
             catch (InterruptedException ie)
             {
+                _logger.info("No delay between connect retries, use tcp://host:port?connectdelay='value' to enable.");
                 return null;
             }
         }
@@ -153,10 +154,10 @@
 
     public String toString()
     {
-        return "SingleServer:\n"+
-                "Max Retries:"+_retries+
-                "\nCurrent Retry:"+_currentRetries+
-                "\n"+_brokerDetail+"\n";
+        return "SingleServer:\n" +
+               "Max Retries:" + _retries +
+               "\nCurrent Retry:" + _currentRetries +
+               "\n" + _brokerDetail + "\n";
     }
 
 }

Added: incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/failover/FailoverMethodTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/failover/FailoverMethodTest.java?rev=598360&view=auto
==============================================================================
--- incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/failover/FailoverMethodTest.java (added)
+++ incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/failover/FailoverMethodTest.java Mon Nov 26 09:49:05 2007
@@ -0,0 +1,114 @@
+package org.apache.qpid.server.failover;
+
+import junit.framework.TestCase;
+import org.apache.qpid.AMQDisconnectedException;
+import org.apache.qpid.AMQException;
+import org.apache.qpid.client.AMQConnection;
+import org.apache.qpid.client.AMQConnectionURL;
+import org.apache.qpid.client.transport.TransportConnection;
+import org.apache.qpid.client.vmbroker.AMQVMBrokerCreationException;
+import org.apache.qpid.url.URLSyntaxException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import java.util.concurrent.CountDownLatch;/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+public class FailoverMethodTest extends TestCase implements ExceptionListener
+{
+    private static final Logger _logger = LoggerFactory.getLogger(FailoverMethodTest.class);
+    private CountDownLatch _failoverComplete = new CountDownLatch(1);
+
+    public void setUp() throws AMQVMBrokerCreationException
+    {
+    }
+
+    public void tearDown() throws AMQVMBrokerCreationException
+    {
+    }
+
+    public void testFailoverRoundRobinDelay() throws URLSyntaxException, AMQVMBrokerCreationException, InterruptedException, JMSException
+    {
+        String connectionString = "amqp://guest:guest@/test?brokerlist='vm://:1;tcp://localhost:5670?connectdelay='2000',retries='3''";
+
+        AMQConnectionURL url = new AMQConnectionURL(connectionString);
+        TransportConnection.createVMBroker(1);
+
+        try
+        {
+            long start = System.currentTimeMillis();
+            AMQConnection connection = new AMQConnection(url, null);
+
+            connection.setExceptionListener(this);
+
+            TransportConnection.killAllVMBrokers();
+
+            _failoverComplete.await();
+            long end = System.currentTimeMillis();
+
+            assertTrue("Failover took at over 10seconds", (end - start) > 6000);
+
+        }
+        catch (AMQException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    public void testFailoverSingleDelay() throws URLSyntaxException, AMQVMBrokerCreationException, InterruptedException, JMSException
+    {
+        String connectionString = "amqp://guest:guest@/test?brokerlist='vm://:1?connectdelay='2000',retries='3''";
+
+        AMQConnectionURL url = new AMQConnectionURL(connectionString);
+        TransportConnection.createVMBroker(1);
+
+        try
+        {
+            long start = System.currentTimeMillis();
+            AMQConnection connection = new AMQConnection(url, null);
+
+            connection.setExceptionListener(this);
+
+            TransportConnection.killAllVMBrokers();
+
+            _failoverComplete.await();
+            long end = System.currentTimeMillis();
+
+            assertTrue("Failover took at over 10seconds", (end - start) > 6000);
+
+        }
+        catch (AMQException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+
+    public void onException(JMSException e)
+    {
+        if (e.getLinkedException() instanceof AMQDisconnectedException)
+        {
+            _failoverComplete.countDown();
+        }
+    }
+}

Propchange: incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/failover/FailoverMethodTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/branches/M2.1/java/systests/src/main/java/org/apache/qpid/server/failover/FailoverMethodTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date