You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2010/05/08 00:42:09 UTC
svn commit: r942259 - in
/geronimo/components/txmanager/trunk/geronimo-transaction/src:
main/java/org/apache/geronimo/transaction/manager/
test/java/org/apache/geronimo/transaction/manager/ test/resources/META-INF/
Author: djencks
Date: Fri May 7 22:42:08 2010
New Revision: 942259
URL: http://svn.apache.org/viewvc?rev=942259&view=rev
Log:
GERONIMO-5289 add some heuristic tests, and fix everCommit test
Added:
geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/HeuristicTest.java (with props)
geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerTest.java (contents, props changed)
- copied, changed from r942257, geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TestTransactionManager.java
Removed:
geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TestTransactionManager.java
Modified:
geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/CommitTask.java
geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java
geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResource.java
geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResourceManager.java
geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/ProtocolTest.java
geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerImplTest.java
geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XidImporterTest.java
geronimo/components/txmanager/trunk/geronimo-transaction/src/test/resources/META-INF/NOTICE.txt
Modified: geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/CommitTask.java
URL: http://svn.apache.org/viewvc/geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/CommitTask.java?rev=942259&r1=942258&r2=942259&view=diff
==============================================================================
--- geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/CommitTask.java (original)
+++ geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/CommitTask.java Fri May 7 22:42:08 2010
@@ -68,6 +68,7 @@ public class CommitTask implements Runna
try {
try {
manager.getCommitter().commit(manager.getBranchId(), false);
+ evercommit = true;
i.remove();
} catch (XAException e) {
log.error("Unexpected exception committing " + manager.getCommitter() + "; continuing to commit other RMs", e);
Modified: geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java
URL: http://svn.apache.org/viewvc/geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java?rev=942259&r1=942258&r2=942259&view=diff
==============================================================================
--- geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java (original)
+++ geronimo/components/txmanager/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java Fri May 7 22:42:08 2010
@@ -757,7 +757,7 @@ public class TransactionImpl implements
XAException cause = commitTask.getCause();
boolean evercommit = commitTask.isEvercommit();
if (cause != null) {
- if (cause.errorCode == XAException.XA_HEURRB&& !evercommit) {
+ if (cause.errorCode == XAException.XA_HEURRB && !evercommit) {
throw (HeuristicRollbackException) new HeuristicRollbackException("Error during two phase commit").initCause(cause);
} else if (cause.errorCode == XAException.XA_HEURRB && evercommit) {
throw (HeuristicMixedException) new HeuristicMixedException("Error during two phase commit").initCause(cause);
Added: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/HeuristicTest.java
URL: http://svn.apache.org/viewvc/geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/HeuristicTest.java?rev=942259&view=auto
==============================================================================
--- geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/HeuristicTest.java (added)
+++ geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/HeuristicTest.java Fri May 7 22:42:08 2010
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.geronimo.transaction.manager;
+
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.xa.XAException;
+import junit.framework.TestCase;
+
+/**
+ * Test all combinations of heuristic error codes except XA_HEURHAZ
+ * @version $Rev$ $Date$
+ */
+public class HeuristicTest extends TestCase {
+
+ TransactionLog transactionLog = new MockLog();
+
+ TransactionManagerImpl tm;
+
+ protected void setUp() throws Exception {
+ tm = new TransactionManagerImpl(10,
+ new XidFactoryImpl("WHAT DO WE CALL IT?".getBytes()), transactionLog);
+ }
+
+ protected void tearDown() throws Exception {
+ tm = null;
+ }
+
+ public void test_C_C() throws Exception {
+ expectSuccess(0,0);
+ }
+ public void test_C_HC() throws Exception {
+ expectSuccess(0,XAException.XA_HEURCOM);
+ }
+ public void test_C_HM() throws Exception {
+ expectHeuristicMixedException(0, XAException.XA_HEURMIX);
+ }
+ public void test_C_HR() throws Exception {
+ expectHeuristicMixedException(0, XAException.XA_HEURRB);
+ }
+
+ public void test_HC_C() throws Exception {
+ expectSuccess(XAException.XA_HEURCOM,0);
+ }
+ public void test_HC_HC() throws Exception {
+ expectSuccess(XAException.XA_HEURCOM, XAException.XA_HEURCOM);
+ }
+ public void test_HC_HM() throws Exception {
+ expectHeuristicMixedException(XAException.XA_HEURCOM, XAException.XA_HEURMIX);
+ }
+ public void test_HC_HR() throws Exception {
+ expectHeuristicMixedException(XAException.XA_HEURCOM, XAException.XA_HEURRB);
+ }
+
+ public void test_HM_C() throws Exception {
+ expectHeuristicMixedException(XAException.XA_HEURMIX, 0);
+ }
+ public void test_HM_HC() throws Exception {
+ expectHeuristicMixedException(XAException.XA_HEURMIX, XAException.XA_HEURCOM);
+ }
+ public void test_HM_HM() throws Exception {
+ expectHeuristicMixedException(XAException.XA_HEURMIX, XAException.XA_HEURMIX);
+ }
+ public void test_HM_HR() throws Exception {
+ expectHeuristicMixedException(XAException.XA_HEURMIX, XAException.XA_HEURRB);
+ }
+
+
+ public void test_HR_C() throws Exception {
+ expectHeuristicMixedException(XAException.XA_HEURRB, 0);
+ }
+ public void test_HR_HC() throws Exception {
+ expectHeuristicMixedException(XAException.XA_HEURRB, XAException.XA_HEURCOM);
+ }
+ public void test_HR_HM() throws Exception {
+ expectHeuristicMixedException(XAException.XA_HEURRB, XAException.XA_HEURMIX);
+ }
+ public void test_HR_HR() throws Exception {
+ expectHeuristicRollbackException(XAException.XA_HEURRB, XAException.XA_HEURRB);
+ }
+
+
+ public void expectSuccess(int first, int second) throws Exception {
+ tm.begin();
+ tm.getTransaction().enlistResource(new MockResource("1", first));
+ tm.getTransaction().enlistResource(new MockResource("2", second));
+ tm.commit();
+ }
+ public void expectHeuristicMixedException(int first, int second) throws Exception {
+ tm.begin();
+ tm.getTransaction().enlistResource(new MockResource("1", first));
+ tm.getTransaction().enlistResource(new MockResource("2", second));
+ try {
+ tm.commit();
+ fail();
+ } catch (HeuristicMixedException e) {
+ //expected
+ }
+ }
+ public void expectHeuristicRollbackException(int first, int second) throws Exception {
+ tm.begin();
+ tm.getTransaction().enlistResource(new MockResource("1", first));
+ tm.getTransaction().enlistResource(new MockResource("2", second));
+ try {
+ tm.commit();
+ fail();
+ } catch (HeuristicRollbackException e) {
+ //expected
+ }
+ }
+
+}
Propchange: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/HeuristicTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/HeuristicTest.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/HeuristicTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResource.java
URL: http://svn.apache.org/viewvc/geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResource.java?rev=942259&r1=942258&r2=942259&view=diff
==============================================================================
--- geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResource.java (original)
+++ geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResource.java Fri May 7 22:42:08 2010
@@ -36,15 +36,22 @@ public class MockResource implements Nam
private boolean prepared;
private boolean committed;
private boolean rolledback;
- private Set preparedXids = new HashSet();
- private Set knownXids = new HashSet();
- private Set finishedXids = new HashSet();//end was called with TMSUCCESS or TMFAIL
+ private Set<Xid> preparedXids = new HashSet<Xid>();
+ private Set<Xid> knownXids = new HashSet<Xid>();
+ private Set<Xid> finishedXids = new HashSet<Xid>();//end was called with TMSUCCESS or TMFAIL
+ private int errorStatus;
public MockResource(MockResourceManager manager, String xaResourceName) {
this.manager = manager;
this.xaResourceName = xaResourceName;
}
+ public MockResource(String xaResourceName, int errorStatus) {
+ this.manager = new MockResourceManager();
+ this.xaResourceName = xaResourceName;
+ this.errorStatus = errorStatus;
+ }
+
public int getTransactionTimeout() throws XAException {
return timeout;
}
@@ -110,6 +117,9 @@ public class MockResource implements Nam
if (!finishedXids.contains(xid)) {
throw new XAException(XAException.XAER_PROTO);
}
+ if (errorStatus != 0) {
+ throw new XAException(errorStatus);
+ }
preparedXids.remove(xid);
committed = true;
}
@@ -131,11 +141,11 @@ public class MockResource implements Nam
}
public void forget(Xid xid) throws XAException {
- throw new UnsupportedOperationException();
+// throw new UnsupportedOperationException();
}
public Xid[] recover(int flag) throws XAException {
- return (Xid[]) preparedXids.toArray(new Xid[preparedXids.size()]);
+ return preparedXids.toArray(new Xid[preparedXids.size()]);
}
public boolean isPrepared() {
Modified: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResourceManager.java
URL: http://svn.apache.org/viewvc/geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResourceManager.java?rev=942259&r1=942258&r2=942259&view=diff
==============================================================================
--- geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResourceManager.java (original)
+++ geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResourceManager.java Fri May 7 22:42:08 2010
@@ -22,7 +22,6 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import javax.transaction.SystemException;
import javax.transaction.xa.XAException;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;
@@ -33,20 +32,17 @@ import javax.transaction.xa.Xid;
* @version $Rev$ $Date$
*/
public class MockResourceManager {
- private boolean willCommit;
- private Map xids = new HashMap();
+ private Map<Xid, Set<XAResource>> xids = new HashMap<Xid, Set<XAResource>>();
- public MockResourceManager(boolean willCommit) {
- this.willCommit = willCommit;
+ public MockResourceManager() {
}
public MockResource getResource(String xaResourceName) {
- MockResource mockResource = new MockResource(this, xaResourceName);
- return mockResource;
+ return new MockResource(this, xaResourceName);
}
public void join(Xid xid, XAResource xaRes) throws XAException {
- Set resSet = (Set) xids.get(xid);
+ Set<XAResource> resSet = xids.get(xid);
if (resSet == null) {
throw new XAException(XAException.XAER_NOTA);
}
@@ -57,7 +53,7 @@ public class MockResourceManager {
if (xids.containsKey(xid)) {
throw new XAException(XAException.XAER_DUPID);
}
- Set resSet = new HashSet();
+ Set<XAResource> resSet = new HashSet<XAResource>();
resSet.add(xaRes);
xids.put(xid, resSet);
}
Modified: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/ProtocolTest.java
URL: http://svn.apache.org/viewvc/geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/ProtocolTest.java?rev=942259&r1=942258&r2=942259&view=diff
==============================================================================
--- geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/ProtocolTest.java (original)
+++ geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/ProtocolTest.java Fri May 7 22:42:08 2010
@@ -32,8 +32,8 @@ public class ProtocolTest extends TestCa
protected void setUp() throws Exception {
tm = new TransactionManagerImpl();
- mrm1 = new MockResourceManager(true);
- mrm2 = new MockResourceManager(true);
+ mrm1 = new MockResourceManager();
+ mrm2 = new MockResourceManager();
mr11 = new MockResource(mrm1, "mr11");
mr12 = new MockResource(mrm1, "mr12");
mr21 = new MockResource(mrm2, "mr21");
Modified: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerImplTest.java
URL: http://svn.apache.org/viewvc/geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerImplTest.java?rev=942259&r1=942258&r2=942259&view=diff
==============================================================================
--- geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerImplTest.java (original)
+++ geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerImplTest.java Fri May 7 22:42:08 2010
@@ -33,10 +33,10 @@ import junit.framework.TestCase;
*/
public class TransactionManagerImplTest extends TestCase {
- MockResourceManager rm1 = new MockResourceManager(true);
+ MockResourceManager rm1 = new MockResourceManager();
MockResource r1_1 = rm1.getResource("rm1_1");
MockResource r1_2 = rm1.getResource("rm1_2");
- MockResourceManager rm2 = new MockResourceManager(true);
+ MockResourceManager rm2 = new MockResourceManager();
MockResource r2_1 = rm2.getResource("rm2_1");
MockResource r2_2 = rm2.getResource("rm2_2");
Copied: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerTest.java (from r942257, geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TestTransactionManager.java)
URL: http://svn.apache.org/viewvc/geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerTest.java?p2=geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerTest.java&p1=geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TestTransactionManager.java&r1=942257&r2=942259&rev=942259&view=diff
==============================================================================
--- geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TestTransactionManager.java (original)
+++ geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerTest.java Fri May 7 22:42:08 2010
@@ -29,7 +29,7 @@ import junit.framework.TestCase;
*
* @version $Rev$ $Date$
*/
-public class TestTransactionManager extends TestCase {
+public class TransactionManagerTest extends TestCase {
TransactionManager tm;
MockResourceManager rm1, rm2, rm3;
@@ -113,8 +113,8 @@ public class TestTransactionManager exte
protected void setUp() throws Exception {
tm = new TransactionManagerImpl();
- rm1 = new MockResourceManager(true);
- rm2 = new MockResourceManager(true);
- rm3 = new MockResourceManager(false);
+ rm1 = new MockResourceManager();
+ rm2 = new MockResourceManager();
+ rm3 = new MockResourceManager();
}
}
Propchange: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XidImporterTest.java
URL: http://svn.apache.org/viewvc/geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XidImporterTest.java?rev=942259&r1=942258&r2=942259&view=diff
==============================================================================
--- geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XidImporterTest.java (original)
+++ geronimo/components/txmanager/trunk/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XidImporterTest.java Fri May 7 22:42:08 2010
@@ -33,10 +33,10 @@ import junit.framework.TestCase;
* */
public class XidImporterTest extends TestCase{
- MockResourceManager rm1 = new MockResourceManager(true);
+ MockResourceManager rm1 = new MockResourceManager();
MockResource r1_1 = new MockResource(rm1, "rm1");
MockResource r1_2 = new MockResource(rm1, "rm1");
- MockResourceManager rm2 = new MockResourceManager(true);
+ MockResourceManager rm2 = new MockResourceManager();
MockResource r2_1 = new MockResource(rm2, "rm2");
MockResource r2_2 = new MockResource(rm2, "rm2");
Modified: geronimo/components/txmanager/trunk/geronimo-transaction/src/test/resources/META-INF/NOTICE.txt
URL: http://svn.apache.org/viewvc/geronimo/components/txmanager/trunk/geronimo-transaction/src/test/resources/META-INF/NOTICE.txt?rev=942259&r1=942258&r2=942259&view=diff
==============================================================================
--- geronimo/components/txmanager/trunk/geronimo-transaction/src/test/resources/META-INF/NOTICE.txt (original)
+++ geronimo/components/txmanager/trunk/geronimo-transaction/src/test/resources/META-INF/NOTICE.txt Fri May 7 22:42:08 2010
@@ -1,5 +1,5 @@
Apache Geronimo
-Copyright 2003-2009 The Apache Software Foundation
+Copyright 2003-2010 The Apache Software Foundation
This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).