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);