Skip to content

Commit

Permalink
Merge pull request #8581 from dmlloyd/master-wfly-6011
Browse files Browse the repository at this point in the history
[WFLY-6011] Do not report in-flight subordinate transcations as recoverable to upstream coordinators
  • Loading branch information
n1hility committed Feb 2, 2016
2 parents f05eb57 + 9bb9715 commit 9ae0b57
Showing 1 changed file with 16 additions and 6 deletions.
Expand Up @@ -40,6 +40,7 @@
import org.jboss.msc.service.StartException;
import org.jboss.msc.service.StopContext;
import org.jboss.msc.value.InjectedValue;
import org.wildfly.security.manager.WildFlySecurityManager;

import javax.resource.spi.XATerminator;
import javax.transaction.NotSupportedException;
Expand Down Expand Up @@ -71,6 +72,13 @@ public class EJBRemoteTransactionsRepository implements Service<EJBRemoteTransac

private final Map<UserTransactionID, Uid> userTransactions = Collections.synchronizedMap(new HashMap<UserTransactionID, Uid>());

private static final Xid[] NO_XIDS = new Xid[0];
private static final boolean RECOVER_IN_FLIGHT;

static {
RECOVER_IN_FLIGHT = Boolean.parseBoolean(WildFlySecurityManager.getPropertyPrivileged("org.wildfly.ejb.txn.recovery.in-flight", "false"));
}

@Override
public void start(StartContext context) throws StartException {
recoveryManagerService.getValue().addSerializableXAResourceDeserializer(EJBXAResourceDeserializer.INSTANCE);
Expand Down Expand Up @@ -164,11 +172,13 @@ Transaction importTransaction(final XidTransactionID xidTransactionID, final int

public Xid[] getXidsToRecoverForParentNode(final String parentNodeName, int recoveryFlags) throws XAException {
final Set<Xid> xidsToRecover = new HashSet<Xid>();
final TransactionImporter transactionImporter = SubordinationManager.getTransactionImporter();
if (transactionImporter instanceof TransactionImporterImple) {
final Set<Xid> inFlightXids = ((TransactionImporterImple) transactionImporter).getInflightXids(parentNodeName);
if (inFlightXids != null) {
xidsToRecover.addAll(inFlightXids);
if (RECOVER_IN_FLIGHT) {
final TransactionImporter transactionImporter = SubordinationManager.getTransactionImporter();
if (transactionImporter instanceof TransactionImporterImple) {
final Set<Xid> inFlightXids = ((TransactionImporterImple) transactionImporter).getInflightXids(parentNodeName);
if (inFlightXids != null) {
xidsToRecover.addAll(inFlightXids);
}
}
}
final XATerminator xaTerminator = SubordinationManager.getXATerminator();
Expand All @@ -183,7 +193,7 @@ public Xid[] getXidsToRecoverForParentNode(final String parentNodeName, int reco
xidsToRecover.addAll(Arrays.asList(inDoubtTransactions));
}
}
return xidsToRecover.toArray(new Xid[0]);
return xidsToRecover.toArray(NO_XIDS);
}

public UserTransaction getUserTransaction() {
Expand Down

0 comments on commit 9ae0b57

Please sign in to comment.