[Mulgara-svn] r1017 - branches/mgr-121-lockrecovery/src/jar/resolver/java/org/mulgara/resolver

ronald at mulgara.org ronald at mulgara.org
Mon Jun 23 08:11:26 UTC 2008


Author: ronald
Date: 2008-06-23 01:11:25 -0700 (Mon, 23 Jun 2008)
New Revision: 1017

Modified:
   branches/mgr-121-lockrecovery/src/jar/resolver/java/org/mulgara/resolver/ExternalTransactionUnitTest.java
   branches/mgr-121-lockrecovery/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java
Log:
Heuristically roll back timed out transactions instead of aborting them.


Modified: branches/mgr-121-lockrecovery/src/jar/resolver/java/org/mulgara/resolver/ExternalTransactionUnitTest.java
===================================================================
--- branches/mgr-121-lockrecovery/src/jar/resolver/java/org/mulgara/resolver/ExternalTransactionUnitTest.java	2008-06-23 06:02:39 UTC (rev 1016)
+++ branches/mgr-121-lockrecovery/src/jar/resolver/java/org/mulgara/resolver/ExternalTransactionUnitTest.java	2008-06-23 08:11:25 UTC (rev 1017)
@@ -1590,7 +1590,14 @@
         assertTrue("Commit should have failed due to idle timeout", xaeThrown);
 
         logger.debug("Rolling back transaction on session1");
-        resource.rollback(xid);
+        try {
+          resource.rollback(xid);
+          fail("Rollback after timeout should have thrown XA_HEURRB");
+        } catch (XAException xae) {
+          assertEquals("Rollback after timeout should have thrown XA_HEURRB",
+                       XAException.XA_HEURRB, xae.errorCode);
+          resource.forget(xid);
+        }
       } finally {
         session1.close();
       }
@@ -1668,7 +1675,14 @@
         assertTrue("Commit should have failed due to transaction timeout", xaeThrown);
 
         logger.debug("Rolling back transaction on session1");
-        resource.rollback(xid);
+        try {
+          resource.rollback(xid);
+          fail("Rollback after timeout should have thrown XA_HEURRB");
+        } catch (XAException xae) {
+          assertEquals("Rollback after timeout should have thrown XA_HEURRB",
+                       XAException.XA_HEURRB, xae.errorCode);
+          resource.forget(xid);
+        }
       } finally {
         session1.close();
       }

Modified: branches/mgr-121-lockrecovery/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java
===================================================================
--- branches/mgr-121-lockrecovery/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java	2008-06-23 06:02:39 UTC (rev 1016)
+++ branches/mgr-121-lockrecovery/src/jar/resolver/java/org/mulgara/resolver/MulgaraTransactionFactory.java	2008-06-23 08:11:25 UTC (rev 1017)
@@ -288,8 +288,7 @@
           long lastActive = writeTransaction.lastActive();
           if ((lastActive > 0) && (lastActive < System.currentTimeMillis() - idleTimeout)) {
             logger.warn("Reclaiming writelock from inactive transaction");
-            writeTransaction.abortTransaction("Transaction idle-timeout", new Throwable());
-            writeTransaction = null;
+            writeTransaction.heuristicRollback("Transaction idle-timeout");
           } else {
             if (logger.isDebugEnabled())
               logger.debug("Transaction still active: " + lastActive + " time: " + System.currentTimeMillis() + " timeout: " + idleTimeout);
@@ -327,8 +326,7 @@
 
         if (writeTransaction != null) {
           logger.warn("Reclaiming writelock from over-extended transaction");
-          writeTransaction.abortTransaction("Transaction timed out", new Throwable());
-          writeTransaction = null;
+          writeTransaction.heuristicRollback("Transaction timed out");
         }
       } catch (MulgaraTransactionException em) {
         logger.warn("Exception thrown while reclaiming writelock from over-extended transaction", em);




More information about the Mulgara-svn mailing list