[infinispan-commits] Infinispan SVN: r1398 - trunk/core/src/main/java/org/infinispan/transaction/xa.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Wed Jan 20 05:15:45 EST 2010
Author: manik.surtani at jboss.com
Date: 2010-01-20 05:15:44 -0500 (Wed, 20 Jan 2010)
New Revision: 1398
Modified:
trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionTable.java
Log:
Handle task rejection
Modified: trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionTable.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionTable.java 2010-01-19 15:57:51 UTC (rev 1397)
+++ trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionTable.java 2010-01-20 10:15:44 UTC (rev 1398)
@@ -30,6 +30,7 @@
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.RejectedExecutionException;
/**
* Repository for {@link org.infinispan.transaction.xa.RemoteTransaction} and {@link
@@ -88,29 +89,34 @@
final List<Address> leavers = MembershipArithmetic.getMembersLeft(vce.getOldMembers(), vce.getNewMembers());
if (!leavers.isEmpty()) {
if (trace) log.trace("Saw {0} leavers - kicking off a lock breaking task", leavers.size());
- lockBreakingService.submit(new Runnable() {
- public void run() {
- Set<GlobalTransaction> toKill = new HashSet<GlobalTransaction>();
- for (GlobalTransaction gt: remoteTransactions.keySet()) {
- if (leavers.contains(gt.getAddress())) toKill.add(gt);
- }
+ try {
+ lockBreakingService.submit(new Runnable() {
+ public void run() {
+ Set<GlobalTransaction> toKill = new HashSet<GlobalTransaction>();
+ for (GlobalTransaction gt : remoteTransactions.keySet()) {
+ if (leavers.contains(gt.getAddress())) toKill.add(gt);
+ }
- if (trace) log.trace("Global transactions {0} pertain to leavers list {1} and need to be killed", toKill, leavers);
+ if (trace)
+ log.trace("Global transactions {0} pertain to leavers list {1} and need to be killed", toKill, leavers);
- for (GlobalTransaction gtx: toKill) {
- if (trace) log.trace("Killing {0}", gtx);
- RollbackCommand rc = new RollbackCommand(gtx);
- rc.init(invoker, icc, TransactionTable.this);
- try {
- rc.perform(null);
- } catch (Throwable e) {
- log.warn("Unable to roll back gtx " + gtx, e);
- } finally {
- removeRemoteTransaction(gtx);
+ for (GlobalTransaction gtx : toKill) {
+ if (trace) log.trace("Killing {0}", gtx);
+ RollbackCommand rc = new RollbackCommand(gtx);
+ rc.init(invoker, icc, TransactionTable.this);
+ try {
+ rc.perform(null);
+ } catch (Throwable e) {
+ log.warn("Unable to roll back gtx " + gtx, e);
+ } finally {
+ removeRemoteTransaction(gtx);
+ }
}
}
- }
- });
+ });
+ } catch (RejectedExecutionException ree) {
+ log.debug("Unable to submit task to executor", ree);
+ }
}
}
}
@@ -138,8 +144,8 @@
}
/**
- * Creates and register a {@link org.infinispan.transaction.xa.RemoteTransaction} with no modifications.
- * Returns the created transaction.
+ * Creates and register a {@link org.infinispan.transaction.xa.RemoteTransaction} with no modifications. Returns the
+ * created transaction.
*
* @throws IllegalStateException if an attempt to create a {@link org.infinispan.transaction.xa.RemoteTransaction}
* for an already registered id is made.
More information about the infinispan-commits
mailing list