You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2012/07/24 11:50:38 UTC
svn commit: r1364957 - in /aries/trunk/transaction/transaction-manager:
pom.xml src/test/java/org/apache/aries/transaction/LogTest.java
Author: gnodet
Date: Tue Jul 24 09:50:38 2012
New Revision: 1364957
URL: http://svn.apache.org/viewvc?rev=1364957&view=rev
Log:
Add a performance test for the transaction manager
Added:
aries/trunk/transaction/transaction-manager/src/test/java/org/apache/aries/transaction/LogTest.java
Modified:
aries/trunk/transaction/transaction-manager/pom.xml
Modified: aries/trunk/transaction/transaction-manager/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-manager/pom.xml?rev=1364957&r1=1364956&r2=1364957&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-manager/pom.xml (original)
+++ aries/trunk/transaction/transaction-manager/pom.xml Tue Jul 24 09:50:38 2012
@@ -120,6 +120,12 @@
<version>4.10</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <version>1.5.11</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
Added: aries/trunk/transaction/transaction-manager/src/test/java/org/apache/aries/transaction/LogTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-manager/src/test/java/org/apache/aries/transaction/LogTest.java?rev=1364957&view=auto
==============================================================================
--- aries/trunk/transaction/transaction-manager/src/test/java/org/apache/aries/transaction/LogTest.java (added)
+++ aries/trunk/transaction/transaction-manager/src/test/java/org/apache/aries/transaction/LogTest.java Tue Jul 24 09:50:38 2012
@@ -0,0 +1,167 @@
+/**
+ * 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.aries.transaction;
+
+import java.io.File;
+import javax.transaction.SystemException;
+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.apache.geronimo.transaction.manager.GeronimoTransactionManager;
+import org.apache.geronimo.transaction.manager.NamedXAResource;
+import org.apache.geronimo.transaction.manager.NamedXAResourceFactory;
+import org.apache.geronimo.transaction.manager.XidFactory;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class LogTest {
+
+ int minThreads = 100;
+ int maxThreads = 100;
+ int minTxPerThread = 1000;
+ int maxTxPerThread = 1000;
+
+ @Before
+ public void setUp() {
+ System.setProperty("org.slf4j.simplelogger.defaultlog", "error");
+ }
+
+ @Test
+ @Ignore
+ public void testGeronimo() throws Exception {
+ System.err.println("Geronimo");
+ XidFactory xidFactory = new XidFactoryImpl("hi".getBytes());
+ HOWLLog txLog = new HOWLLog("org.objectweb.howl.log.BlockLogBuffer",
+ 4,
+ true,
+ true,
+ 50,
+ new File(".").getAbsolutePath(),
+ "log",
+ "geronimo",
+ 512,
+ 0,
+ 2,
+ 4,
+ -1,
+ true,
+ xidFactory,
+ null);
+ txLog.doStart();
+ GeronimoTransactionManager tm = new GeronimoTransactionManager(600, xidFactory, txLog);
+ XAResource xar1 = new TestXAResource("res1");
+ XAResource xar2 = new TestXAResource("res2");
+ tm.registerNamedXAResourceFactory(new TestXAResourceFactory("res1"));
+ tm.registerNamedXAResourceFactory(new TestXAResourceFactory("res2"));
+ for (int i = minThreads; i <= maxThreads; i *= 10) {
+ for (int j = minTxPerThread; j <= maxTxPerThread; j *= 10) {
+ long ms = testThroughput(tm, xar1, xar2, i, j);
+ System.err.println("TPS (" + i + " threads, " + j + " tx) = " + ((i * j) / (ms / 1000.0)));
+ }
+ }
+ txLog.doStop();
+ System.err.println();
+ System.err.flush();
+ }
+
+ public long testThroughput(final TransactionManager tm, final XAResource xar1, final XAResource xar2, final int nbThreads, final int nbTxPerThread) throws Exception {
+ Thread[] threads = new Thread[nbThreads];
+ for (int thIdx = 0; thIdx < nbThreads; thIdx++) {
+ threads[thIdx] = new Thread() {
+ @Override
+ public void run() {
+ try {
+ for (int txIdx = 0; txIdx < nbTxPerThread; txIdx++) {
+ tm.begin();
+ Transaction tx = tm.getTransaction();
+ tx.enlistResource(xar1);
+ tx.enlistResource(xar2);
+ tx.commit();
+ }
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
+ };
+ }
+ long t0 = System.currentTimeMillis();
+ for (int thIdx = 0; thIdx < nbThreads; thIdx++) {
+ threads[thIdx].start();
+ }
+ for (int thIdx = 0; thIdx < nbThreads; thIdx++) {
+ threads[thIdx].join();
+ }
+ long t1 = System.currentTimeMillis();
+ return t1 - t0;
+ }
+
+ public static class TestXAResourceFactory implements NamedXAResourceFactory {
+ private final String name;
+ public TestXAResourceFactory(String name) {
+ this.name = name;
+ }
+ public String getName() {
+ return name;
+ }
+ public NamedXAResource getNamedXAResource() throws SystemException {
+ return new TestXAResource(name);
+ }
+ public void returnNamedXAResource(NamedXAResource namedXAResource) {
+ }
+ }
+
+ public static class TestXAResource implements XAResource, NamedXAResource {
+ private final String name;
+ public TestXAResource(String name) {
+ this.name = name;
+ }
+ public String getName() {
+ return name;
+ }
+ public void commit(Xid xid, boolean b) throws XAException {
+ }
+ public void end(Xid xid, int i) throws XAException {
+ }
+ public void forget(Xid xid) throws XAException {
+ }
+ public int getTransactionTimeout() throws XAException {
+ return 0;
+ }
+ public boolean isSameRM(XAResource xaResource) throws XAException {
+ return xaResource instanceof TestXAResource && ((TestXAResource) xaResource).name.equals(name);
+ }
+ public int prepare(Xid xid) throws XAException {
+ return 0;
+ }
+ public Xid[] recover(int i) throws XAException {
+ return new Xid[0];
+ }
+ public void rollback(Xid xid) throws XAException {
+ }
+ public boolean setTransactionTimeout(int i) throws XAException {
+ return false;
+ }
+ public void start(Xid xid, int i) throws XAException {
+ }
+ }
+
+}