[jboss-svn-commits] JBL Code SVN: r27653 - in labs/jbosstm/trunk/ArjunaCore: arjuna/classes/com/arjuna/ats/internal/arjuna/recovery and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jul 6 14:40:20 EDT 2009


Author: mark.little at jboss.com
Date: 2009-07-06 14:40:20 -0400 (Mon, 06 Jul 2009)
New Revision: 27653

Added:
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/recovery/RecoverAtomicActionTest.java
Modified:
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/recovery/RecoverAtomicAction.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/AtomicActionExpiryScanner.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/ExpiredTransactionScanner.java
   labs/jbosstm/trunk/ArjunaCore/docs/user_guide/FailureRecoveryGuide.odt
Log:
https://jira.jboss.org/jira/browse/JBTM-587

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/recovery/RecoverAtomicAction.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/recovery/RecoverAtomicAction.java	2009-07-06 18:25:31 UTC (rev 27652)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/recovery/RecoverAtomicAction.java	2009-07-06 18:40:20 UTC (rev 27653)
@@ -37,6 +37,7 @@
 
 import com.arjuna.ats.arjuna.logging.tsLogger;
 import com.arjuna.ats.arjuna.logging.FacilityCode;
+import com.arjuna.ats.internal.arjuna.recovery.AtomicActionExpiryScanner;
 
 import com.arjuna.common.util.logging.*;
 
@@ -45,7 +46,8 @@
  * @message com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_2 [com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_2] - RecoverAtomicAction.replayPhase2: Unexpected status: {0}
  * @message com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_3 [com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_3] - RecoverAtomicAction.replayPhase2( {0} )  finished 
  * @message com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_4 [com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_4] - RecoverAtomicAction: transaction {0} not activated, unable to replay phase 2 commit. Check state has not already been completed.
-*/
+ * @message com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_5 [com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_5] - RecoverAtomicAction - tried to move failed activation log {0}
+ */
 
 public class RecoverAtomicAction extends AtomicAction
 {
@@ -111,6 +113,25 @@
        else
        {
 	   tsLogger.arjLoggerI18N.warn("com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_4", new Object[]{get_uid()});
+	   
+	   /*
+	    * Failure to activate so move the log. Unlikely to get better automatically!
+	    */
+	   
+	  AtomicActionExpiryScanner scanner = new AtomicActionExpiryScanner();
+	  
+	  try
+	  {
+	      scanner.moveEntry(get_uid());
+	  }
+	  catch (final Exception ex)
+	  {
+	      if (tsLogger.arjLoggerI18N.isWarnEnabled())
+              {
+                  tsLogger.arjLoggerI18N.warn("com.arjuna.ats.arjuna.recovery.RecoverAtomicAction_5", 
+                                              new Object[]{get_uid()});
+              }
+	  }
        }
    }
    

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/AtomicActionExpiryScanner.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/AtomicActionExpiryScanner.java	2009-07-06 18:25:31 UTC (rev 27652)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/AtomicActionExpiryScanner.java	2009-07-06 18:40:20 UTC (rev 27653)
@@ -25,7 +25,7 @@
 
 /**
  * This class is a plug-in module for the recovery manager. This class is
- * responsible for the removing transaction status manager items that are too
+ * responsible for the removing transaction logs that are too
  * old.
  */
 

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/ExpiredTransactionScanner.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/ExpiredTransactionScanner.java	2009-07-06 18:25:31 UTC (rev 27652)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/recovery/ExpiredTransactionScanner.java	2009-07-06 18:40:20 UTC (rev 27653)
@@ -29,6 +29,7 @@
 import com.arjuna.ats.arjuna.state.InputObjectState;
 import com.arjuna.ats.arjuna.state.OutputObjectState;
 import com.arjuna.ats.arjuna.coordinator.TxControl;
+import com.arjuna.ats.arjuna.exceptions.ObjectStoreException;
 
 import com.arjuna.ats.arjuna.logging.tsLogger;
 
@@ -122,29 +123,7 @@
 
 								try
 								{
-									InputObjectState state = _objectStore
-											.read_committed(newUid, _typeName);
-
-									if (state != null) // just in case recovery
-														// kicked-in
-									{
-										boolean moved = _objectStore
-												.write_committed(newUid,
-														_movedTypeName,
-														new OutputObjectState(
-																state));
-
-										if (!moved)
-										{
-											tsLogger.arjLoggerI18N
-													.warn(
-															"com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionStatusManagerScanner_3",
-															new Object[]
-															{ newUid });
-										}
-										else
-										    _objectStore.remove_committed(newUid, _typeName);
-									}
+								    moveEntry(newUid);
 								}
 								catch (Exception ex)
 								{
@@ -179,6 +158,30 @@
 		return true;
 	}
 
+	public boolean moveEntry (Uid newUid) throws ObjectStoreException
+	{
+	    InputObjectState state = _objectStore.read_committed(newUid, _typeName);
+	    boolean res = false;
+	    
+	    if (state != null) // just in case recovery
+	        // kicked-in
+	    {
+	        boolean moved = _objectStore.write_committed(newUid, _movedTypeName, new OutputObjectState(state));
+
+	        if (!moved)
+	        {
+	            tsLogger.arjLoggerI18N.warn(
+	                    "com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionStatusManagerScanner_3",
+	                    new Object[]
+	                               { newUid });
+	        }
+	        else
+	            res = _objectStore.remove_committed(newUid, _typeName);
+	    }
+          
+	    return res;
+	}
+	
 	private String _typeName;
 
 	private String _movedTypeName;

Added: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/recovery/RecoverAtomicActionTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/recovery/RecoverAtomicActionTest.java	                        (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/recovery/RecoverAtomicActionTest.java	2009-07-06 18:40:20 UTC (rev 27653)
@@ -0,0 +1,92 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors 
+ * as indicated by the @author tags. 
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors. 
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+/*
+ * Copyright (C) 2004,
+ *
+ * Arjuna Technologies Ltd,
+ * Newcastle upon Tyne,
+ * Tyne and Wear,
+ * UK.
+ *
+ * $Id: RecoveryManagerTest.java 2342 2006-03-30 13:06:17Z  $
+ */
+
+package com.hp.mwtests.ts.arjuna.recovery;
+
+import com.arjuna.ats.arjuna.AtomicAction;
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.coordinator.ActionStatus;
+import com.arjuna.ats.arjuna.coordinator.TxControl;
+import com.arjuna.ats.arjuna.objectstore.ObjectStore;
+import com.arjuna.ats.arjuna.recovery.RecoverAtomicAction;
+import com.arjuna.ats.arjuna.state.OutputObjectState;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class RecoverAtomicActionTest
+{
+    @Test
+    public void test ()
+    {
+        ObjectStore os = TxControl.getStore();
+        OutputObjectState fluff = new OutputObjectState();
+        Uid kungfuTx = new Uid();
+        boolean passed = false;
+        final String tn = new AtomicAction().type();
+
+        try
+        {
+            kungfuTx.pack(fluff);
+
+            System.err.println("Creating dummy log");
+
+            os.write_committed(kungfuTx, tn, fluff);
+
+            if (os.currentState(kungfuTx, tn) == ObjectStore.OS_COMMITTED)
+            {
+                System.err.println("Wrote dummy transaction " + kungfuTx);
+
+                RecoverAtomicAction rAA = new RecoverAtomicAction(kungfuTx, ActionStatus.COMMITTED);
+                
+                // activate should fail!
+                
+                if (!rAA.activate())
+                {
+                    rAA.replayPhase2();
+                    
+                    // state should have been moved
+                    
+                    if (os.currentState(kungfuTx, tn) == ObjectStore.OS_UNKNOWN)
+                        passed = true;
+                }
+            }
+            else
+                System.err.println("State is not committed!");
+        }
+        catch (final Exception ex)
+        {
+            ex.printStackTrace();
+        }
+
+        assertTrue(passed);
+    }
+}

Modified: labs/jbosstm/trunk/ArjunaCore/docs/user_guide/FailureRecoveryGuide.odt
===================================================================
(Binary files differ)




More information about the jboss-svn-commits mailing list