You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2013/05/22 00:18:37 UTC
svn commit: r1484999 -
/activemq/trunk/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java
Author: tabish
Date: Tue May 21 22:18:36 2013
New Revision: 1484999
URL: http://svn.apache.org/r1484999
Log:
fix for: https://issues.apache.org/jira/browse/AMQ-4548
Modified:
activemq/trunk/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java
Modified: activemq/trunk/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java?rev=1484999&r1=1484998&r2=1484999&view=diff
==============================================================================
--- activemq/trunk/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java (original)
+++ activemq/trunk/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java Tue May 21 22:18:36 2013
@@ -594,13 +594,16 @@ public abstract class MessageDatabase ex
}
});
- // rollback any recovered inflight local transactions
+ // rollback any recovered inflight local transactions, and discard any inflight XA transactions.
Set<TransactionId> toRollback = new HashSet<TransactionId>();
+ Set<TransactionId> toDiscard = new HashSet<TransactionId>();
synchronized (inflightTransactions) {
for (Iterator<TransactionId> it = inflightTransactions.keySet().iterator(); it.hasNext(); ) {
TransactionId id = it.next();
if (id.isLocalTransaction()) {
toRollback.add(id);
+ } else {
+ toDiscard.add(id);
}
}
for (TransactionId tx: toRollback) {
@@ -609,6 +612,12 @@ public abstract class MessageDatabase ex
}
store(new KahaRollbackCommand().setTransactionInfo(TransactionIdConversion.convertToLocal(tx)), false, null, null);
}
+ for (TransactionId tx: toDiscard) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("discarding recovered in-flight XA transaction " + tx);
+ }
+ inflightTransactions.remove(tx);
+ }
}
synchronized (preparedTransactions) {