You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gd...@apache.org on 2004/07/27 05:52:16 UTC
cvs commit: incubator-geronimo/modules/transaction/src/test/org/apache/geronimo/transaction/manager RecoveryTest.java
gdamour 2004/07/26 20:52:15
Modified: modules/transaction/src/java/org/apache/geronimo/transaction/manager
RecoveryImpl.java
modules/transaction/src/test/org/apache/geronimo/transaction/manager
RecoveryTest.java
Log:
When a failure occurs between the 2PC of a XAResource and the force-write of the committed event by
TransactionLog, RecoveryImpl was not "correctly" doing a force-write of the committed event after recovery
due to a very minor bug.
Revision Changes Path
1.4 +2 -1 incubator-geronimo/modules/transaction/src/java/org/apache/geronimo/transaction/manager/RecoveryImpl.java
Index: RecoveryImpl.java
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/transaction/src/java/org/apache/geronimo/transaction/manager/RecoveryImpl.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- RecoveryImpl.java 22 Jul 2004 03:39:01 -0000 1.3
+++ RecoveryImpl.java 27 Jul 2004 03:52:15 -0000 1.4
@@ -77,6 +77,7 @@
Set transactionsForName = (Set)nameToOurTxMap.get(name);
if (transactionsForName == null) {
transactionsForName = new HashSet();
+ nameToOurTxMap.put(name, transactionsForName);
}
transactionsForName.add(xidBranchesPair);
}
1.3 +23 -1 incubator-geronimo/modules/transaction/src/test/org/apache/geronimo/transaction/manager/RecoveryTest.java
Index: RecoveryTest.java
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/transaction/src/test/org/apache/geronimo/transaction/manager/RecoveryTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- RecoveryTest.java 11 Jun 2004 19:20:55 -0000 1.2
+++ RecoveryTest.java 27 Jul 2004 03:52:15 -0000 1.3
@@ -40,6 +40,28 @@
private final String RM2 = "rm2";
private final String RM3 = "rm3";
+ public void testCommittedRMToBeRecovered() throws Exception {
+ MockLog mockLog = new MockLog();
+ Xid[] xids = getXidArray(1);
+ // specifies an empty Xid array such that this XAResource has nothing
+ // to recover. This means that the presumed abort protocol has failed
+ // right after the commit of the RM and after the force-write of the
+ // prepared log record.
+ MockXAResource xares1 = new MockXAResource(RM1, new Xid[0]);
+ MockTransactionInfo[] txInfos = makeTxInfos(xids);
+ addBranch(txInfos, xares1);
+ prepareLog(mockLog, txInfos);
+ Recovery recovery = new RecoveryImpl(mockLog, xidFactory);
+ recovery.recoverLog();
+ assertTrue(!recovery.hasRecoveryErrors());
+ assertTrue(recovery.getExternalXids().isEmpty());
+ assertTrue(!recovery.localRecoveryComplete());
+ recovery.recoverResourceManager(xares1);
+ assertEquals(0, xares1.committed.size());
+ assertTrue(recovery.localRecoveryComplete());
+
+ }
+
public void test2ResOnlineAfterRecoveryStart() throws Exception {
MockLog mockLog = new MockLog();
Xid[] xids = getXidArray(3);