[jboss-svn-commits] JBL Code SVN: r37627 - in labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed: server and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Oct 20 04:45:59 EDT 2011
Author: tomjenkinson
Date: 2011-10-20 04:45:59 -0400 (Thu, 20 Oct 2011)
New Revision: 37627
Modified:
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java
Log:
JBTM-895 updated to make sure that we clean up the temporary records of transactions in the 1PC/rollback scenario
Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java 2011-10-20 08:07:24 UTC (rev 37626)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java 2011-10-20 08:45:59 UTC (rev 37627)
@@ -135,10 +135,9 @@
Xid currentXid = originalServer.getCurrentXid();
originalServer.storeRootTransaction();
transactionManager.suspend();
- persistProxy(originalServer.getNodeName(), 2000, currentXid);
+ XAResource proxyXAResource = initializeProxy(originalServer, 2000, currentXid);
performTransactionalWork(null, new LinkedList<Integer>(Arrays.asList(new Integer[] { 2000 })), remainingTimeout, currentXid, 1, false);
transactionManager.resume(originalTransaction);
- XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
originalTransaction.enlistResource(proxyXAResource);
// Needs a second resource to make sure we dont get the one
// phase optimization happening
@@ -213,10 +212,9 @@
Xid currentXid = originalServer.getCurrentXid();
originalServer.storeRootTransaction();
transactionManager.suspend();
- persistProxy(originalServer.getNodeName(), 2000, currentXid);
+ XAResource proxyXAResource = initializeProxy(originalServer, 2000, currentXid);
performTransactionalWork(null, new LinkedList<Integer>(Arrays.asList(new Integer[] { 2000 })), remainingTimeout, currentXid, 2, false);
transactionManager.resume(originalTransaction);
- XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
originalTransaction.enlistResource(proxyXAResource);
originalServer.removeRootTransaction(currentXid);
transactionManager.commit();
@@ -292,10 +290,9 @@
Xid currentXid = originalServer.getCurrentXid();
originalServer.storeRootTransaction();
transactionManager.suspend();
- persistProxy(originalServer.getNodeName(), 2000, currentXid);
+ XAResource proxyXAResource = initializeProxy(originalServer, 2000, currentXid);
performTransactionalWork(null, new LinkedList<Integer>(Arrays.asList(new Integer[] { 2000 })), remainingTimeout, currentXid, 2, false);
transactionManager.resume(originalTransaction);
- XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
originalTransaction.enlistResource(proxyXAResource);
originalServer.removeRootTransaction(currentXid);
transactionManager.commit();
@@ -431,10 +428,9 @@
Xid currentXid = originalServer.getCurrentXid();
originalServer.storeRootTransaction();
transactionManager.suspend();
- persistProxy(originalServer.getNodeName(), 2000, currentXid);
+ XAResource proxyXAResource = initializeProxy(originalServer, 2000, currentXid);
performTransactionalWork(null, new LinkedList<Integer>(Arrays.asList(new Integer[] { 2000 })), remainingTimeout, currentXid, 1, false);
transactionManager.resume(originalTransaction);
- XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
originalTransaction.enlistResource(proxyXAResource);
originalServer.removeRootTransaction(currentXid);
transactionManager.commit();
@@ -456,10 +452,9 @@
Xid currentXid = originalServer.getCurrentXid();
originalServer.storeRootTransaction();
transactionManager.suspend();
- persistProxy(originalServer.getNodeName(), 2000, currentXid);
+ XAResource proxyXAResource = initializeProxy(originalServer, 2000, currentXid);
performTransactionalWork(null, new LinkedList<Integer>(Arrays.asList(new Integer[] { 2000 })), remainingTimeout, currentXid, 1, false);
transactionManager.resume(originalTransaction);
- XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
originalTransaction.enlistResource(proxyXAResource);
originalTransaction
.registerSynchronization(originalServer.generateProxySynchronization(lookupProvider, originalServer.getNodeName(), 2000, currentXid));
@@ -550,7 +545,7 @@
originalServer.storeRootTransaction();
originalTransaction.enlistResource(new TestResource(counter, originalServer.getNodeName(), false));
transactionManager.suspend();
- persistProxy(originalServer.getNodeName(), 2000, currentXid);
+ XAResource proxyXAResource = initializeProxy(originalServer, 2000, currentXid);
// Migrate a transaction
LocalServer currentServer = getLocalServer(2000);
@@ -563,7 +558,6 @@
// Complete the transaction at the original server
transactionManager.resume(originalTransaction);
- XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
originalTransaction.enlistResource(proxyXAResource);
originalServer.removeRootTransaction(currentXid);
Thread.currentThread().sleep((subordinateTimeout + 1) * 1000);
@@ -668,7 +662,7 @@
Xid currentXid = currentServer.getCurrentXid();
transactionManager.suspend();
- persistProxy(currentServer.getNodeName(), nodesToFlowTo.get(0), currentXid);
+ XAResource proxyXAResource = initializeProxy(currentServer, nodesToFlowTo.get(0), currentXid);
boolean proxyRequired = performTransactionalWork(counter, nodesToFlowTo, remainingTimeout, currentXid, numberOfResourcesToRegister,
addSynchronization);
@@ -681,10 +675,11 @@
// performance drain and will result in multiple subordinate
// transactions and performance issues
if (proxyRequired) {
- XAResource proxyXAResource = currentServer.generateProxyXAResource(lookupProvider, currentServer.getNodeName(), nextServerNodeName);
transaction.enlistResource(proxyXAResource);
transaction.registerSynchronization(currentServer.generateProxySynchronization(lookupProvider, currentServer.getNodeName(), nextServerNodeName,
toMigrate));
+ } else {
+ currentServer.cleanupProxy(proxyXAResource);
}
}
@@ -700,24 +695,26 @@
return localServers[index];
}
- private synchronized void persistProxy(Integer localServerName, Integer remoteServerName, Xid xid) throws IOException {
+ private synchronized XAResource initializeProxy(LocalServer server, Integer remoteServerName, Xid xid) throws IOException {
// Persist a proxy for the remote server this can mean we try to recover
// transactions at a remote server that did not get chance to
// prepare but the alternative is to orphan a prepared server
- File dir = new File(System.getProperty("user.dir") + "/distributedjta/ProxyXAResource/" + localServerName);
+ File dir = new File(System.getProperty("user.dir") + "/distributedjta/ProxyXAResource/" + server.getNodeName());
dir.mkdirs();
File file = new File(dir, new Uid().fileStringForm());
- if (!file.exists()) {
- file.createNewFile();
- DataOutputStream fos = new DataOutputStream(new FileOutputStream(file));
- fos.writeInt(remoteServerName);
- fos.writeInt(xid.getFormatId());
- fos.writeInt(xid.getGlobalTransactionId().length);
- fos.write(xid.getGlobalTransactionId());
- fos.writeInt(xid.getBranchQualifier().length);
- fos.write(xid.getBranchQualifier());
- }
+ file.createNewFile();
+ DataOutputStream fos = new DataOutputStream(new FileOutputStream(file));
+ fos.writeInt(remoteServerName);
+ fos.writeInt(xid.getFormatId());
+ fos.writeInt(xid.getGlobalTransactionId().length);
+ fos.write(xid.getGlobalTransactionId());
+ fos.writeInt(xid.getBranchQualifier().length);
+ fos.write(xid.getBranchQualifier());
+
+ XAResource proxyXAResource = server.generateProxyXAResource(lookupProvider, server.getNodeName(), remoteServerName, file);
+
+ return proxyXAResource;
}
private static class MyLookupProvider implements LookupProvider {
Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java 2011-10-20 08:07:24 UTC (rev 37626)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java 2011-10-20 08:45:59 UTC (rev 37627)
@@ -21,6 +21,7 @@
*/
package com.arjuna.ats.jta.distributed.server;
+import java.io.File;
import java.io.IOException;
import javax.transaction.InvalidTransactionException;
@@ -57,7 +58,7 @@
public RemoteServer connectTo();
- public XAResource generateProxyXAResource(LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName);
+ public XAResource generateProxyXAResource(LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName, File file);
public Synchronization generateProxySynchronization(LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName, Xid toRegisterAgainst);
@@ -66,4 +67,6 @@
public CompletionCounter getCompletionCounter();
public void shutdown() throws Exception;
+
+ public void cleanupProxy(XAResource proxyXAResource);
}
Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java 2011-10-20 08:07:24 UTC (rev 37626)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java 2011-10-20 08:45:59 UTC (rev 37627)
@@ -55,6 +55,7 @@
private Integer localServerName;
private LookupProvider lookupProvider;
private CompletionCounter completionCounter;
+ private File file;
/**
* Create a new proxy to the remote server.
@@ -63,11 +64,12 @@
* @param localServerName
* @param remoteServerName
*/
- public ProxyXAResource(CompletionCounter completionCounter, LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName) {
+ public ProxyXAResource(CompletionCounter completionCounter, LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName, File file) {
this.completionCounter = completionCounter;
this.lookupProvider = lookupProvider;
this.localServerName = localServerName;
this.remoteServerName = remoteServerName;
+ this.file = file;
map = new HashMap<Xid, File>();
}
@@ -90,6 +92,10 @@
this.map = map;
}
+ public void deleteTemporaryFile() {
+ this.file.delete();
+ }
+
/**
* Store the XID.
*/
@@ -136,6 +142,9 @@
System.out.println(map.get(xid));
map.remove(xid).delete();
}
+ if (this.file != null) {
+ this.file.delete();
+ }
map.put(xid, file);
} catch (IOException e) {
@@ -167,6 +176,11 @@
map.get(xid).delete();
map.remove(xid);
}
+
+ // THIS CAN ONLY HAPPEN IN 1PC OR ROLLBACK
+ if (file != null) {
+ file.delete();
+ }
if (completionCounter != null) {
completionCounter.incrementCommit();
}
@@ -194,6 +208,11 @@
map.get(xid).delete();
map.remove(xid);
}
+
+ // THIS CAN ONLY HAPPEN IN 1PC OR ROLLBACK
+ if (file != null) {
+ file.delete();
+ }
if (completionCounter != null) {
completionCounter.incrementRollback();
}
Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java 2011-10-20 08:07:24 UTC (rev 37626)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java 2011-10-20 08:45:59 UTC (rev 37627)
@@ -21,6 +21,7 @@
*/
package com.arjuna.ats.jta.distributed.server.impl;
+import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
import java.net.InetAddress;
@@ -36,6 +37,7 @@
import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;
import org.jboss.tm.TransactionTimeoutConfiguration;
@@ -289,11 +291,21 @@
}
@Override
- public ProxyXAResource generateProxyXAResource(LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName) {
- return new ProxyXAResource(counter, lookupProvider, localServerName, remoteServerName);
+ public CompletionCounter getCompletionCounter() {
+ return counter;
}
@Override
+ public ProxyXAResource generateProxyXAResource(LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName, File file) {
+ return new ProxyXAResource(counter, lookupProvider, localServerName, remoteServerName, file);
+ }
+
+ @Override
+ public void cleanupProxy(XAResource proxyXAResource) {
+ ((ProxyXAResource)proxyXAResource).deleteTemporaryFile();
+ }
+
+ @Override
public Synchronization generateProxySynchronization(LookupProvider lookupProvider, Integer localServerName, Integer remoteServerName, Xid toRegisterAgainst) {
return new ProxySynchronization(lookupProvider, localServerName, remoteServerName, toRegisterAgainst);
}
@@ -380,9 +392,4 @@
Thread.currentThread().setContextClassLoader(contextClassLoader);
}
}
-
- @Override
- public CompletionCounter getCompletionCounter() {
- return counter;
- }
}
More information about the jboss-svn-commits
mailing list