Only apply timeout to the Message sends, other commands are handled
separately as needed.
This commit is contained in:
Timothy Bish 2014-06-18 12:58:50 -04:00
parent d694984077
commit 8824ac9fcb
2 changed files with 46 additions and 3 deletions

View File

@ -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");

View File

@ -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 extends TestCase {
public class FailoverTimeoutTest {
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");