You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2012/07/31 15:53:38 UTC
svn commit: r1367552 -
/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/DbRestartJDBCQueueMasterSlaveTest.java
Author: gtully
Date: Tue Jul 31 13:53:37 2012
New Revision: 1367552
URL: http://svn.apache.org/viewvc?rev=1367552&view=rev
Log:
add some context to the intermittent failure, issue is ioexception from store being treated as transport failure, if the error ocurrs on a ack commit we can expect a redelivery that won't come and fail the test
Modified:
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/DbRestartJDBCQueueMasterSlaveTest.java
Modified: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/DbRestartJDBCQueueMasterSlaveTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/DbRestartJDBCQueueMasterSlaveTest.java?rev=1367552&r1=1367551&r2=1367552&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/DbRestartJDBCQueueMasterSlaveTest.java (original)
+++ activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/DbRestartJDBCQueueMasterSlaveTest.java Tue Jul 31 13:53:37 2012
@@ -23,6 +23,7 @@ import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
+import javax.jms.TransactionRolledBackException;
import org.apache.activemq.ActiveMQConnection;
import org.apache.derby.jdbc.EmbeddedDataSource;
import org.slf4j.Logger;
@@ -96,10 +97,28 @@ public class DbRestartJDBCQueueMasterSla
receiveSession.commit();
super.consumeMessage(message, messageList);
} catch (JMSException e) {
- LOG.info("Faild to commit message receipt: " + message, e);
+ LOG.info("Failed to commit message receipt: " + message, e);
try {
receiveSession.rollback();
} catch (JMSException ignored) {}
+
+ if (e.getCause() instanceof TransactionRolledBackException) {
+ TransactionRolledBackException transactionRolledBackException = (TransactionRolledBackException)e.getCause();
+ if (transactionRolledBackException.getMessage().indexOf("in doubt") != -1) {
+ // failover chucked bc there is a missing reply to a commit. the ack may have got there and the reply
+ // was lost or the ack may be lost.
+ // so we may not get a resend.
+ //
+ // REVISIT: A JDBC store IO exception should not cause the connection to drop, so it needs to be wrapped
+ // possibly by the IOExceptionHandler
+ // The commit/close wrappers in jdbc TransactionContext need to delegate to the IOExceptionHandler
+
+ // this would leave the application aware of the store failure, and possible aware of whether the commit
+ // was a success, rather than going into failover-retries as it does now.
+
+ }
+
+ }
}
}
}