https://issues.apache.org/jira/browse/AMQ-5231
Only apply timeout to the Message sends, other commands are handled separately as needed. Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/70b02fde Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/70b02fde Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/70b02fde Branch: refs/heads/activemq-5.10.x Commit: 70b02fde333959b4c7ad91e15ddbca144061e2d2 Parents: f63bd32 Author: Timothy Bish <[email protected]> Authored: Wed Jun 18 12:58:50 2014 -0400 Committer: Hadrian Zbarcea <[email protected]> Committed: Mon Dec 15 17:01:30 2014 -0500 ---------------------------------------------------------------------- .../transport/failover/FailoverTransport.java | 2 +- .../transport/failover/FailoverTimeoutTest.java | 47 +++++++++++++++++++- 2 files changed, 46 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/70b02fde/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java ---------------------------------------------------------------------- diff --git a/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java b/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java index 2829d41..6df82ed 100755 --- a/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java +++ b/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java @@ -602,7 +602,7 @@ public class FailoverTransport implements CompositeTransport { LOG.trace("Waiting for transport to reconnect..: " + command); } long end = System.currentTimeMillis(); - if (timeout > 0 && (end - start > timeout)) { + if (command.isMessage() && timeout > 0 && (end - start > timeout)) { timedout = true; if (LOG.isInfoEnabled()) { LOG.info("Failover timed out after " + (end - start) + "ms"); http://git-wip-us.apache.org/repos/asf/activemq/blob/70b02fde/activemq-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverTimeoutTest.java ---------------------------------------------------------------------- diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverTimeoutTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverTimeoutTest.java index e52b2c7..9ef6e28 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverTimeoutTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverTimeoutTest.java @@ -16,23 +16,36 @@ */ package org.apache.activemq.transport.failover; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import java.net.URI; + import javax.jms.Connection; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; -import junit.framework.TestCase; + import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.broker.BrokerService; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class FailoverTimeoutTest { -public class FailoverTimeoutTest extends TestCase { + private static final Logger LOG = LoggerFactory.getLogger(FailoverTimeoutTest.class); private static final String QUEUE_NAME = "test.failovertimeout"; BrokerService bs; URI tcpUri; + @Before public void setUp() throws Exception { bs = new BrokerService(); bs.setUseJmx(false); @@ -41,12 +54,41 @@ public class FailoverTimeoutTest extends TestCase { tcpUri = bs.getTransportConnectors().get(0).getConnectUri(); } + @After public void tearDown() throws Exception { if (bs != null) { bs.stop(); } } + @Test + public void testTimoutDoesNotFailConnectionAttempts() throws Exception { + bs.stop(); + long timeout = 1000; + + long startTime = System.currentTimeMillis(); + + ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory( + "failover:(" + tcpUri + ")" + + "?timeout=" + timeout + "&useExponentialBackOff=false" + + "&maxReconnectAttempts=5" + "&initialReconnectDelay=1000"); + Connection connection = cf.createConnection(); + try { + connection.start(); + fail("Should have failed to connect"); + } catch (JMSException ex) { + LOG.info("Caught exception on call to start: {}", ex.getMessage()); + } + + long endTime = System.currentTimeMillis(); + long duration = endTime - startTime; + + LOG.info("Time spent waiting to connect: {} ms", duration); + + assertTrue(duration > 3000); + } + + @Test public void testTimeout() throws Exception { long timeout = 1000; @@ -77,6 +119,7 @@ public class FailoverTimeoutTest extends TestCase { bs.stop(); } + @Test public void testUpdateUris() throws Exception { ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("failover:(" + tcpUri + ")?useExponentialBackOff=false");
