You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2005/12/15 03:10:57 UTC
cvs commit: db-ojb/src/test/org/apache/ojb/performance PerfHandle.java PerfMain.java PerfTest.java
arminw 2005/12/14 18:10:57
Modified: src/test/org/apache/ojb/compare Tag: OJB_1_0_RELEASE
OJBPerfTest.java
src/test/org/apache/ojb/performance Tag: OJB_1_0_RELEASE
PerfHandle.java PerfMain.java PerfTest.java
Log:
fix bug, make tests more fair
Revision Changes Path
No revision
No revision
1.1.2.3 +22 -9 db-ojb/src/test/org/apache/ojb/compare/OJBPerfTest.java
Index: OJBPerfTest.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/compare/OJBPerfTest.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- OJBPerfTest.java 10 Oct 2005 00:35:43 -0000 1.1.2.2
+++ OJBPerfTest.java 15 Dec 2005 02:10:57 -0000 1.1.2.3
@@ -110,8 +110,14 @@
public static class JdbcPerfHandle extends PerfHandle
{
private static final String TABLE_NAME = "PERF_ARTICLE";
+ // cast to int to avoid problems with DB field length
+ public static volatile int counter = (int) System.currentTimeMillis();
private PersistenceBroker broker;
+ public synchronized static Long nextKey()
+ {
+ return new Long(++counter);
+ }
public JdbcPerfHandle(PerfTest test)
{
@@ -140,14 +146,17 @@
buf.append("INSERT INTO ").append(TABLE_NAME);
buf.append(" (ARTICLE_ID, ARTICLE_NAME, MINIMUM_STOCK, PRICE, UNIT, STOCK, SUPPLIER_ID)");
buf.append(" VALUES (?,?,?,?,?,?,?)");
+ // lookup the connection (using OJB's con pooling support to make the test more fair)
Connection con = getConnection();
con.setAutoCommit(false);
- PreparedStatement stmt = con.prepareStatement(buf.toString());
for (int i = 0; i < arr.length; i++)
{
+ // OJB doesn't use a PS-pool (normally the JDBC driver supports statement pooling)
+ // thus to make this test more fair lookup a new PS for each object
+ PreparedStatement stmt = con.prepareStatement(buf.toString());
PerfArticle article = arr[i];
- // use Identity to set pk field value
- Identity oid = broker.serviceIdentity().buildIdentity(article);
+ // generate PK value
+ article.setArticleId(nextKey());
stmt.setLong(1, article.getArticleId().longValue());
stmt.setString(2, article.getArticleName());
stmt.setInt(3, article.getMinimumStock());
@@ -156,10 +165,10 @@
stmt.setInt(6, article.getStock());
stmt.setInt(7, article.getSupplierId());
stmt.executeUpdate();
+ stmt.close();
}
con.commit();
con.setAutoCommit(true);
- stmt.close();
releaseConnection();
}
@@ -202,9 +211,11 @@
buf.append(" WHERE ARTICLE_ID = ?");
Connection con = getConnection();
con.setAutoCommit(false);
- PreparedStatement stmt = con.prepareStatement(buf.toString());
for (int i = 0; i < arr.length; i++)
{
+ // OJB doesn't use a PS-pool (normally the JDBC driver supports statement pooling)
+ // thus to make this test more fair lookup a new PS for each object
+ PreparedStatement stmt = con.prepareStatement(buf.toString());
PerfArticle article = arr[i];
stmt.setString(1, article.getArticleName());
stmt.setInt(2, article.getMinimumStock());
@@ -214,10 +225,10 @@
stmt.setInt(6, article.getSupplierId());
stmt.setLong(7, article.getArticleId().longValue());
stmt.executeUpdate();
+ stmt.close();
}
con.commit();
con.setAutoCommit(true);
- stmt.close();
releaseConnection();
}
@@ -231,16 +242,18 @@
String sql = "DELETE FROM " + TABLE_NAME + " WHERE ARTICLE_ID = ?";
Connection con = getConnection();
con.setAutoCommit(false);
- PreparedStatement stmt = con.prepareStatement(sql);
for (int i = 0; i < arr.length; i++)
{
+ // OJB doesn't use a PS-pool (normally the JDBC driver supports statement pooling)
+ // thus to make this test more fair lookup a new PS for each object
+ PreparedStatement stmt = con.prepareStatement(sql);
PerfArticle article = arr[i];
stmt.setLong(1, article.getArticleId().longValue());
stmt.execute();
+ stmt.close();
}
con.commit();
con.setAutoCommit(true);
- stmt.close();
releaseConnection();
}
No revision
No revision
1.11.2.3 +8 -8 db-ojb/src/test/org/apache/ojb/performance/PerfHandle.java
Index: PerfHandle.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/performance/PerfHandle.java,v
retrieving revision 1.11.2.2
retrieving revision 1.11.2.3
diff -u -r1.11.2.2 -r1.11.2.3
--- PerfHandle.java 2 Sep 2005 13:27:03 -0000 1.11.2.2
+++ PerfHandle.java 15 Dec 2005 02:10:57 -0000 1.11.2.3
@@ -163,14 +163,14 @@
period = System.currentTimeMillis();
insertNewArticlesStress(m_arr);
period = System.currentTimeMillis() - period;
- test.addTime(1, period);
+ test.addTime(PerfTest.INSERT, period);
}
else
{
period = System.currentTimeMillis();
insertNewArticles(m_arr);
period = System.currentTimeMillis() - period;
- test.addTime(1, period);
+ test.addTime(PerfTest.INSERT, period);
}
// read objects
@@ -186,7 +186,7 @@
test.registerException(PREFIX_LOG
+ "(Something wrong with query result or with object insert operation) ", e);
}
- test.addTime(2, period);
+ test.addTime(PerfTest.FETCH, period);
// update objects
modifyPerfArticle(m_arr);
@@ -195,14 +195,14 @@
period = System.currentTimeMillis();
updateArticlesStress(m_arr);
period = System.currentTimeMillis() - period;
- test.addTime(3, period);
+ test.addTime(PerfTest.UPDATE, period);
}
else
{
period = System.currentTimeMillis();
updateArticles(m_arr);
period = System.currentTimeMillis() - period;
- test.addTime(3, period);
+ test.addTime(PerfTest.UPDATE, period);
}
// delete objects
@@ -211,14 +211,14 @@
period = System.currentTimeMillis();
deleteArticlesStress(m_arr);
period = System.currentTimeMillis() - period;
- test.addTime(4, period);
+ test.addTime(PerfTest.DELETE, period);
}
else
{
period = System.currentTimeMillis();
deleteArticles(m_arr);
period = System.currentTimeMillis() - period;
- test.addTime(4, period);
+ test.addTime(PerfTest.DELETE, period);
}
tearDown();
1.9.2.4 +64 -58 db-ojb/src/test/org/apache/ojb/performance/PerfMain.java
Index: PerfMain.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/performance/PerfMain.java,v
retrieving revision 1.9.2.3
retrieving revision 1.9.2.4
diff -u -r1.9.2.3 -r1.9.2.4
--- PerfMain.java 16 Aug 2005 15:11:33 -0000 1.9.2.3
+++ PerfMain.java 15 Dec 2005 02:10:57 -0000 1.9.2.4
@@ -79,21 +79,13 @@
{
protected static final String EOL = System.getProperty("line.separator");
- /**
- * iterations per thread
- */
+ /** iterations per thread */
private static int iterationsPerThread = 500;
- /**
- * number of concurrent threads
- */
+ /** number of concurrent threads */
private static int concurrentThreads = 10;
- /**
- * if false we use performance optimized delete/insert method
- */
+ /** if false we use performance optimized delete/insert method */
private static boolean useStressMode = false;
- /**
- * number of test loops
- */
+ /** number of test loops */
private static int testLoops = 1;
private HashMap resultMap;
@@ -127,9 +119,7 @@
this.exceptionMap = new Hashtable();
}
- /**
- * Call this to begin the performance test.
- */
+ /** Call this to begin the performance test. */
public void startPerfTest(String[] args) throws Exception
{
ArrayList testList = null;
@@ -190,11 +180,11 @@
EOL + "# Start OJB performance-test framework - do " + testLoops + " loop #" +
EOL + "####################################################" + EOL);
- PerfTest test = null;
+ PerfTest test;
for (int i = 0; i < testLoops; i++)
{
Runtime rt = Runtime.getRuntime();
- long freeMem = 0;
+ long freeMem;
System.out.println("==> perform test loop " + (i + 1));
if(i%2 == 0)
@@ -267,12 +257,15 @@
if (!getExceptionMap().isEmpty())
{
StringBuffer buf = new StringBuffer();
- buf.append(EOL + "Failures occured, test not valid:" + EOL);
+ buf.append(EOL).append("Failures occured, test not valid:").append(EOL);
Iterator it = getExceptionMap().keySet().iterator();
while (it.hasNext())
{
String causer = (String) it.next();
- buf.append("Failure cause by " + causer + ", exception was " + exceptionMap.get(causer) + EOL);
+ buf.append("Failure cause by ")
+ .append(causer).append(", exception was ")
+ .append(exceptionMap.get(causer))
+ .append(EOL);
}
print.println(buf.toString());
}
@@ -306,12 +299,14 @@
buf.append(getFilledUpToLength("OJB PERFORMANCE TEST SUMMARY", columnLength, " "));
buf.append(EOL);
- buf.append(PerfMain.getConcurrentThreads() + " concurrent threads, handle " +
- PerfMain.getIterationsPerThread() + " objects per thread");
+ buf.append(PerfMain.getConcurrentThreads());
+ buf.append(" concurrent threads, handle ");
+ buf.append(PerfMain.getIterationsPerThread());
+ buf.append(" objects per thread");
buf.append(EOL);
buf.append(getFilledUpToLength("", columnLength, " "));
- buf.append("- " + (isUseStressMode() == false ? "performance mode" : "stress mode"));
- buf.append(" - results per thread");
+ buf.append("- ").append(!(isUseStressMode()) ? "performance mode" : "stress mode");
+ buf.append(" - results per thread (av)");
buf.append(EOL);
for (int i = 0; i < columnNumbers; i++)
{
@@ -341,7 +336,7 @@
buf.append(getFilledUpToLength("", columnLength, "-"));
}
- List failures = new ArrayList();
+// List failures = new ArrayList();
// fill table
Iterator it = results.iterator();
int counter = 0;
@@ -356,17 +351,21 @@
// }
if(counter == 0)
{
- calibrationMark = (((double) res.getTotalTime()) / 1000);
+ // the first one is the fastest
+ calibrationMark = res.getTotalTime();
}
+ double period = (double) res.getTestPeriod() / 1000;
+ double total = (double) Math.round((double) res.getTotalTime()) / 1000;
+ long percent = Math.round((res.getTotalTime() / calibrationMark) * 100);
+
buf.append(getFilledUpToLength(res.getTestName(), columnLength, " "));
- buf.append(getFilledUpToLength(new Double((((double) res.getTestPeriod()) / 1000)).toString(), columnLength, " "));
- Double totalTime = new Double((((double) res.getTotalTime()) / 1000));
- buf.append(getFilledUpToLength(totalTime.toString(), columnLength, " "));
- buf.append(getFilledUpToLength(new Long(Math.round((totalTime.doubleValue() / calibrationMark) * 100)).toString(), columnLength, " "));
- buf.append(getFilledUpToLength(new Long(res.getInsertPeriod()).toString(), columnLength, " "));
- buf.append(getFilledUpToLength(new Long(res.getFetchPeriod()).toString(), columnLength, " "));
- buf.append(getFilledUpToLength(new Long(res.getUpdatePeriod()).toString(), columnLength, " "));
- buf.append(getFilledUpToLength(new Long(res.getDeletePeriod()).toString(), columnLength, " "));
+ buf.append(getFilledUpToLength(""+period, columnLength, " "));
+ buf.append(getFilledUpToLength(""+total, columnLength, " "));
+ buf.append(getFilledUpToLength(""+percent, columnLength, " "));
+ buf.append(getFilledUpToLength(Long.toString(res.getInsertPeriod()), columnLength, " "));
+ buf.append(getFilledUpToLength(Long.toString(res.getFetchPeriod()), columnLength, " "));
+ buf.append(getFilledUpToLength(Long.toString(res.getUpdatePeriod()), columnLength, " "));
+ buf.append(getFilledUpToLength(Long.toString(res.getDeletePeriod()), columnLength, " "));
counter++;
}
buf.append(EOL);
@@ -406,7 +405,7 @@
* resultArr[3] updating times
* resultArr[4] deleting times
*/
- public void addPeriodResult(String testName, long[] resultArr)
+ public synchronized void addPeriodResult(String testName, long[] resultArr)
{
PerfResult result = (PerfResult) resultMap.get(testName);
if (result == null)
@@ -436,13 +435,17 @@
System.out.println(buf.toString());
}
- public void addConsistentResult(String testName, int objectsBefore, int objectsAfter)
+ public synchronized void addConsistentResult(String testName, int objectsBefore, int objectsAfter)
{
ConsistentEntry ce = new ConsistentEntry(objectsBefore, objectsAfter);
PerfResult result = (PerfResult) resultMap.get(testName);
if(objectsBefore != objectsAfter)
{
- try{throw new Exception("Wrong object count, before=" + objectsBefore + ", after=" + objectsAfter);}catch(Exception e)
+ try
+ {
+ throw new Exception("Wrong object count, before=" + objectsBefore + ", after=" + objectsAfter);
+ }
+ catch(Exception e)
{
registerException(testName, e);
}
@@ -516,17 +519,17 @@
public String toString()
{
StringBuffer buf = new StringBuffer();
- buf.append(EOL + "[" + this.getClass().getName());
- buf.append(EOL + "testName=" + testName);
- buf.append(EOL + "testPeriod=" + testPeriod);
- buf.append(EOL + "testLoops=" + testLoops);
- buf.append(EOL + "numberOfThreads=" + numberOfThreads);
- buf.append(EOL + "iterationsPerThread=" + iterationsPerThread);
- buf.append(EOL + "isValid=" + isValid());
- buf.append(EOL + "insertPeriod=" + getInsertPeriod());
- buf.append(EOL + "fetchPeriod=" + getFetchPeriod());
- buf.append(EOL + "deletePeriod=" + getDeletePeriod());
- buf.append(EOL + "consistentList: " + consistentList);
+ buf.append(EOL).append("[").append(this.getClass().getName());
+ buf.append(EOL).append("testName=").append(testName);
+ buf.append(EOL).append("testPeriod=").append(testPeriod);
+ buf.append(EOL).append("testLoops=").append(testLoops);
+ buf.append(EOL).append("numberOfThreads=").append(numberOfThreads);
+ buf.append(EOL).append("iterationsPerThread=").append(iterationsPerThread);
+ buf.append(EOL).append("isValid=").append(isValid());
+ buf.append(EOL).append("insertPeriod=").append(getInsertPeriod());
+ buf.append(EOL).append("fetchPeriod=").append(getFetchPeriod());
+ buf.append(EOL).append("deletePeriod=").append(getDeletePeriod());
+ buf.append(EOL).append("consistentList: ").append(consistentList);
buf.append("]");
return buf.toString();
}
@@ -569,10 +572,10 @@
public long getTestPeriod()
{
- return testPeriod / getTestLoops();
+ return testPeriod;
}
- public void addTestPeriod(long aTestPeriod)
+ public synchronized void addTestPeriod(long aTestPeriod)
{
this.testPeriod += aTestPeriod;
}
@@ -617,7 +620,7 @@
return (insertPeriod / getTestLoops()) / getNumberOfThreads();
}
- public void addInsertPeriod(long anInsertPeriod)
+ public synchronized void addInsertPeriod(long anInsertPeriod)
{
this.insertPeriod += anInsertPeriod;
}
@@ -627,7 +630,7 @@
return (fetchPeriod / getTestLoops()) / getNumberOfThreads();
}
- public void addFetchPeriod(long aFetchPeriod)
+ public synchronized void addFetchPeriod(long aFetchPeriod)
{
this.fetchPeriod += aFetchPeriod;
}
@@ -637,7 +640,7 @@
return (updatePeriod / getTestLoops()) / getNumberOfThreads();
}
- public void addUpdatePeriod(long aUpdatePeriod)
+ public synchronized void addUpdatePeriod(long aUpdatePeriod)
{
this.updatePeriod += aUpdatePeriod;
}
@@ -647,7 +650,7 @@
return (deletePeriod / getTestLoops()) / getNumberOfThreads();
}
- public void addDeletePeriod(long aDeletePeriod)
+ public synchronized void addDeletePeriod(long aDeletePeriod)
{
this.deletePeriod += aDeletePeriod;
}
@@ -685,10 +688,13 @@
public String toString()
{
StringBuffer buf = new StringBuffer();
- buf.append("[" + this.getClass().getName()).
- append(": objectsBefore=" + getObjectsBefore()).
- append(" objectsAfter=" + objectsAfter).
- append(" isPassed=" + isPassed());
+ buf.append("[").append(this.getClass().getName())
+ .append(": objectsBefore=")
+ .append(getObjectsBefore())
+ .append(" objectsAfter=")
+ .append(objectsAfter)
+ .append(" isPassed=")
+ .append(isPassed());
return buf.toString();
}
}
1.9.2.2 +19 -7 db-ojb/src/test/org/apache/ojb/performance/PerfTest.java
Index: PerfTest.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/performance/PerfTest.java,v
retrieving revision 1.9.2.1
retrieving revision 1.9.2.2
diff -u -r1.9.2.1 -r1.9.2.2
--- PerfTest.java 22 Apr 2005 16:42:22 -0000 1.9.2.1
+++ PerfTest.java 15 Dec 2005 02:10:57 -0000 1.9.2.2
@@ -23,6 +23,11 @@
*/
public abstract class PerfTest
{
+ protected static final int INSERT = 1;
+ protected static final int FETCH = 2;
+ protected static final int UPDATE = 3;
+ protected static final int DELETE = 4;
+
private final String PREFIX_LOG = "[" + this.getClass().getName() + "] ";
/**
@@ -112,7 +117,7 @@
threads = new Thread[runnables.length];
for (int i = 0; i < threads.length; i++)
{
- threads[i] = new Thread(runnables[i]);
+ threads[i] = new Thread(threadGroup, runnables[i]);
}
for (int i = 0; i < threads.length; i++)
{
@@ -129,6 +134,13 @@
{
System.out.println(PREFIX_LOG + "Thread join interrupted.");
}
+
+ // should always be skipped, because we use 'thread.join'
+ while(threadGroup.activeCount() > 0)
+ {
+ System.out.println("## active threads: " + threadGroup.activeCount());
+ }
+
threads = null;
}
@@ -142,8 +154,8 @@
System.out.println("# Start PerfTest: " + testName() + " #");
}
- int objectCount = 0;
- int objectCountAfter = 0;
+ int objectCount;
+ int objectCountAfter;
testTimes = new long[5];
@@ -153,8 +165,7 @@
PerfHandle[] perfHandles = new PerfHandle[PerfMain.getConcurrentThreads()];
for (int i = 0; i < PerfMain.getConcurrentThreads(); i++)
{
- PerfHandle ph = newPerfHandle(this);
- perfHandles[i] = ph;
+ perfHandles[i] = newPerfHandle(this);
}
testTimes[0] = System.currentTimeMillis();
runTestHandles(perfHandles);
@@ -179,7 +190,8 @@
public synchronized void addTime(int position, long time)
{
- testTimes[position] = testTimes[position] + time;
+ if(position < 1) throw new RuntimeException("Illegal position set");
+ testTimes[position] += time;
}
public void registerPerfMain(PerfMain aPerfMain)
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org