Revision: 190
http://polepos.svn.sourceforge.net/polepos/?rev=190&view=rev
Author: carlrosenberger
Date: 2011-02-18 18:44:02 +0000 (Fri, 18 Feb 2011)
Log Message:
-----------
cr + pr: Work on new concurrent circuits
Modified Paths:
--------------
trunk/polepos/settings/Circuits.properties
trunk/polepos/settings/DebugCircuits.properties
trunk/polepos/src/org/polepos/RunSeason.java
trunk/polepos/src/org/polepos/circuits/complex/Complex.java
trunk/polepos/src/org/polepos/circuits/complexconcurrency/ComplexConcurrency.java
trunk/polepos/src/org/polepos/framework/CircuitBase.java
trunk/polepos/src/org/polepos/framework/ConcurrentDriver.java
trunk/polepos/src/org/polepos/framework/Driver.java
trunk/polepos/src/org/polepos/framework/DriverBase.java
trunk/polepos/src/org/polepos/framework/FixedTimeDriver.java
trunk/polepos/src/org/polepos/framework/FixedTimeRacingStrategy.java
trunk/polepos/src/org/polepos/framework/TimedLapsCircuitBase.java
trunk/polepos/src/org/polepos/framework/TurnSetup.java
trunk/polepos/src/org/polepos/framework/TurnSetupConfig.java
trunk/polepos/src/org/polepos/reporters/FixedTimeCustomBarRenderer.java
trunk/polepos/src/org/polepos/teams/cobra/CobraDriver.java
trunk/polepos/src/org/polepos/teams/db4o/ComplexConcurrencyDb4o.java
trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java
trunk/polepos/src/org/polepos/teams/db4o/FlatObjectDb4o.java
trunk/polepos/src/org/polepos/teams/db4o/NestedListsDb4o.java
trunk/polepos/src/org/polepos/teams/hibernate/ComplexHibernate.java
trunk/polepos/src/org/polepos/teams/hibernate/FlatObjectHibernate.java
trunk/polepos/src/org/polepos/teams/hibernate/HibernateDriver.java
trunk/polepos/src/org/polepos/teams/hibernate/HibernateTeam.java
trunk/polepos/src/org/polepos/teams/hibernate/NestedListsHibernate.java
trunk/polepos/src/org/polepos/teams/jdbc/CommitsJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/FlatObjectJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/InheritanceHierarchyJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/JdbcDriver.java
trunk/polepos/src/org/polepos/teams/jdbc/JdbcTeam.java
trunk/polepos/src/org/polepos/teams/jdbc/NativeIdsJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/NestedListsJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/TreesJdbc.java
trunk/polepos/src/org/polepos/teams/jdo/ComplexConcurrencyJdo.java
trunk/polepos/src/org/polepos/teams/jdo/ComplexJdo.java
trunk/polepos/src/org/polepos/teams/jdo/FlatObjectJdo.java
trunk/polepos/src/org/polepos/teams/jdo/JdoCar.java
trunk/polepos/src/org/polepos/teams/jdo/JdoDriver.java
trunk/polepos/src/org/polepos/teams/jdo/NativeIdsJdo.java
trunk/polepos/src/org/polepos/teams/jdo/NestedListsJdo.java
trunk/polepos/src/org/polepos/teams/jdo/TreesJdo.java
trunk/polepos/src/org/polepos/teams/jpa/JpaDriver.java
trunk/polepos/src/org/polepos/teams/jvi/JviCar.java
trunk/polepos/src/org/polepos/teams/jvi/JviDriver.java
Added Paths:
-----------
trunk/polepos/src/org/polepos/circuits/complexconcurrency/QueryCentricConcurrency.java
trunk/polepos/src/org/polepos/teams/hibernate/ComplexConcurrencyHibernate.java
trunk/polepos/src/org/polepos/teams/jdbc/ComplexConcurrencyJdbc.java
Removed Paths:
-------------
trunk/polepos/src/org/polepos/data/ComplexRoot.java
Modified: trunk/polepos/settings/Circuits.properties
===================================================================
--- trunk/polepos/settings/Circuits.properties 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/settings/Circuits.properties 2011-02-18 18:44:02 UTC (rev 190)
@@ -107,13 +107,25 @@
# complexconcurrency
-#
-# [threads]: number of worker threads
-# [time]: time until stopped
complexconcurrency.threads=1,3,10
-complexconcurrency.time=1000,1000,1000
+complexconcurrency.time=10000,10000,10000
complexconcurrency.objects=3,3,3
-complexconcurrency.depth=3,3,3
-complexconcurrency.selects=10,10,10
+complexconcurrency.depth=4,4,4
+complexconcurrency.writes=3,3,3
+complexconcurrency.selects=20,20,20
+complexconcurrency.updates=2,2,2
+complexconcurrency.deletes=2,2,2
+
+# querycentricconcurrency
+
+querycentricconcurrency.threads=1,3,10
+querycentricconcurrency.time=10000,10000,10000
+querycentricconcurrency.objects=3,3,3
+querycentricconcurrency.depth=4,4,4
+querycentricconcurrency.writes=2,2,2
+querycentricconcurrency.selects=100,100,100
+querycentricconcurrency.updates=1,1,1
+querycentricconcurrency.deletes=1,1,1
+
Modified: trunk/polepos/settings/DebugCircuits.properties
===================================================================
--- trunk/polepos/settings/DebugCircuits.properties 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/settings/DebugCircuits.properties 2011-02-18 18:44:02 UTC (rev 190)
@@ -106,14 +106,26 @@
# complexconcurrency
-#
-# [threads]: number of worker threads
-# [time]: time until stopped
complexconcurrency.threads=1,3,10
-complexconcurrency.time=1000,1000,1000
+complexconcurrency.time=10000,10000,10000
complexconcurrency.objects=3,3,3
-complexconcurrency.depth=3,3,3
-complexconcurrency.selects=10,10,10
+complexconcurrency.depth=4,4,4
+complexconcurrency.writes=3,3,3
+complexconcurrency.selects=20,20,20
+complexconcurrency.updates=2,2,2
+complexconcurrency.deletes=2,2,2
+# querycentricconcurrency
+
+querycentricconcurrency.threads=1,3,10
+querycentricconcurrency.time=10000,10000,10000
+querycentricconcurrency.objects=3,3,3
+querycentricconcurrency.depth=4,4,4
+querycentricconcurrency.writes=2,2,2
+querycentricconcurrency.selects=100,100,100
+querycentricconcurrency.updates=1,1,1
+querycentricconcurrency.deletes=1,1,1
+
+
Modified: trunk/polepos/src/org/polepos/RunSeason.java
===================================================================
--- trunk/polepos/src/org/polepos/RunSeason.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/RunSeason.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -61,13 +61,14 @@
public Circuit[] circuits() {
return new Circuit[] {
- // new ComplexConcurrency(),
-
new ReflectiveCircuitBase(Complex.class),
new ReflectiveCircuitBase(NestedLists.class),
new ReflectiveCircuitBase(InheritanceHierarchy.class),
new ReflectiveCircuitBase(FlatObject.class),
+// new ComplexConcurrency(),
+// new QueryCentricConcurrency(),
+
// new Trees(),
// new NativeIds(),
// new Commits(),
@@ -80,14 +81,14 @@
@Override
public Team[] teams() {
- return new Team[] {
- new Db4oTeam(),
+ return new Team[] {
+
+ new Db4oTeam(),
new JdoTeam(),
-
// new Db4oClientServerTeam(),
-
new JdbcTeam(),
new HibernateTeam(),
+
// new JpaTeam(),
// new JviTeam(),
Modified: trunk/polepos/src/org/polepos/circuits/complex/Complex.java
===================================================================
--- trunk/polepos/src/org/polepos/circuits/complex/Complex.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/circuits/complex/Complex.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -26,7 +26,7 @@
public interface Complex {
@Order(1)
- public void write();
+ public Object write();
@Order(2)
public void read();
Modified: trunk/polepos/src/org/polepos/circuits/complexconcurrency/ComplexConcurrency.java
===================================================================
--- trunk/polepos/src/org/polepos/circuits/complexconcurrency/ComplexConcurrency.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/circuits/complexconcurrency/ComplexConcurrency.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -27,7 +27,7 @@
@Override
public String description() {
- return "runs the complex scenario against multiple concurrent clients within a fixed time span";
+ return "runs inserts, queries, updates and deletes against the complex scenario\nwith multiple concurrent clients within a fixed time span";
}
@Override
Added: trunk/polepos/src/org/polepos/circuits/complexconcurrency/QueryCentricConcurrency.java
===================================================================
--- trunk/polepos/src/org/polepos/circuits/complexconcurrency/QueryCentricConcurrency.java (rev 0)
+++ trunk/polepos/src/org/polepos/circuits/complexconcurrency/QueryCentricConcurrency.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -0,0 +1,31 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+
+package org.polepos.circuits.complexconcurrency;
+
+public class QueryCentricConcurrency extends ComplexConcurrency {
+
+ @Override
+ public String description() {
+ return "runs the complex concurrent scenario with a focus on completing many queries";
+ }
+
+
+}
Property changes on: trunk/polepos/src/org/polepos/circuits/complexconcurrency/QueryCentricConcurrency.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Deleted: trunk/polepos/src/org/polepos/data/ComplexRoot.java
===================================================================
--- trunk/polepos/src/org/polepos/data/ComplexRoot.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/data/ComplexRoot.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -1,31 +0,0 @@
-/*
-This file is part of the PolePosition database benchmark
-http://www.polepos.org
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public
-License along with this program; if not, write to the Free
-Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-MA 02111-1307, USA. */
-
-
-package org.polepos.data;
-
-public class ComplexRoot {
-
- public ComplexHolder0 _holder;
-
- public ComplexRoot(ComplexHolder0 holder) {
- _holder = holder;
- }
-
-}
Modified: trunk/polepos/src/org/polepos/framework/CircuitBase.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/CircuitBase.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/framework/CircuitBase.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -38,8 +38,9 @@
*/
@Override
public String name() {
- String name = internalName();
- return name.substring(0,1).toUpperCase() + name.substring(1);
+ String name = className();
+ int pos = name.lastIndexOf(".");
+ return name.substring(pos + 1);
}
/**
Modified: trunk/polepos/src/org/polepos/framework/ConcurrentDriver.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/ConcurrentDriver.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/framework/ConcurrentDriver.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -20,7 +20,7 @@
package org.polepos.framework;
-public class ConcurrentDriver extends Driver {
+public class ConcurrentDriver implements Driver {
private DriverBase _masterDriver;
@@ -125,6 +125,10 @@
}
return lap.concurrent();
}
+
+ @Override
+ public void prepareDatabase() {
+ _masterDriver.prepareDatabase();
+ }
-
-}
+}
\ No newline at end of file
Modified: trunk/polepos/src/org/polepos/framework/Driver.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/Driver.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/framework/Driver.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -20,24 +20,22 @@
package org.polepos.framework;
-public abstract class Driver implements Cloneable{
+public interface Driver extends Cloneable{
- public Driver() {
- super();
- }
+ public void circuitCompleted();
- public abstract void circuitCompleted();
+ public long checkSum();
- public abstract long checkSum();
+ public void closeDatabase();
- public abstract void closeDatabase();
+ public void prepare() ;
- public abstract void prepare() ;
+ public void configure(Car car, TurnSetup setup);
- public abstract void configure(Car car, TurnSetup setup);
+ public Runnable prepareLap(final Lap lap);
- public abstract Runnable prepareLap(final Lap lap);
+ public boolean canRunLap(Lap lap);
+
+ public void prepareDatabase();
- public abstract boolean canRunLap(Lap lap);
-
}
\ No newline at end of file
Modified: trunk/polepos/src/org/polepos/framework/DriverBase.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/DriverBase.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/framework/DriverBase.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -26,7 +26,7 @@
/**
* an implementation of a circuit for a team
*/
-public abstract class DriverBase extends Driver implements Cloneable
+public abstract class DriverBase implements Driver
{
private Car mCar;
@@ -152,9 +152,7 @@
public void copyStateFrom(DriverBase masterDriver) {
// default: do nothing
-
// Implement for concurrency to copy the state
-
}
public void bulkId(int id) {
@@ -186,15 +184,15 @@
throw new IllegalStateException(" Out of _objectCount. Did you call initializeTestId ?");
}
- protected int selectCount(){
+ protected int selects(){
return setup().getSelectCount();
}
- protected int objectCount() {
+ protected int objects() {
return setup().getObjectCount();
}
- protected int updateCount() {
+ protected int updates() {
return setup().getUpdateCount();
}
@@ -206,6 +204,14 @@
return setup().getReuse();
}
+ protected int writes(){
+ return setup().getWrites();
+ }
+
+ protected int deletes(){
+ return setup().getDeletes();
+ }
+
protected boolean doCommit(){
if(_objectCount == 0){
return true;
@@ -219,5 +225,9 @@
protected boolean hasMoreTestIds() {
return _objectCount > 0;
}
+
+ public void prepareDatabase(){
+ // virtual
+ }
}
Modified: trunk/polepos/src/org/polepos/framework/FixedTimeDriver.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/FixedTimeDriver.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/framework/FixedTimeDriver.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -22,8 +22,10 @@
public interface FixedTimeDriver {
- public void bulkId(int id);
+ public void prefillDatabase();
- public void race();
+ public void race();
+
+
}
Modified: trunk/polepos/src/org/polepos/framework/FixedTimeRacingStrategy.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/FixedTimeRacingStrategy.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/framework/FixedTimeRacingStrategy.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -45,39 +45,40 @@
results[i] = turnResult;
}
for (Reporter reporter : reporters) {
- reporter.report(team, car, turnSetups, results);
+ reporter.report(team, car, turnSetups, results);
}
-
}
private Result raceTurn(Team team, Car car, Driver driver, TurnSetup setup, int setupIndex) {
car.team().setUp();
driver.configure(car, setup);
+ driver.prepareDatabase();
+
driver.prepare();
- // fill database
-
+ ((FixedTimeDriver)driver).prefillDatabase();
driver.closeDatabase();
MemoryUtil.gc();
- int threadCount = setup.getThreadCount();
-
int time = setup.getTime();
+ int threadCount = setup.getThreadCount();
DriverBase[] drivers = new DriverBase[threadCount];
ConcurrentTurnRacer[] racers = new ConcurrentTurnRacer[threadCount];
Thread[] threads = new Thread[threadCount];
+
for (int i = 0; i < threads.length; i++) {
drivers[i] = ((DriverBase)driver).clone();
- // drivers[i].configure(car, setup);
+ drivers[i].configure(car, setup);
drivers[i].prepare();
drivers[i].bulkId(i + 1);
racers[i] = new ConcurrentTurnRacer((FixedTimeDriver)drivers[i]);
threads[i] = new Thread(racers[i]);
}
+
for (int i = 0; i < threads.length; i++) {
threads[i].start();
}
Modified: trunk/polepos/src/org/polepos/framework/TimedLapsCircuitBase.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/TimedLapsCircuitBase.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/framework/TimedLapsCircuitBase.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -165,6 +165,7 @@
private void prepareDriverToRunLaps(Car car, Driver driver, TurnSetup setup) {
car.team().setUp();
driver.configure(car, setup);
+ driver.prepareDatabase();
driver.prepare();
}
Modified: trunk/polepos/src/org/polepos/framework/TurnSetup.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/TurnSetup.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/framework/TurnSetup.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -171,6 +171,13 @@
public int getTime() {
return getSetting(TurnSetupConfig.TIME);
}
+
+ public int getWrites() {
+ return getSetting(TurnSetupConfig.WRITES);
+ }
+
+ public int getDeletes() {
+ return getSetting(TurnSetupConfig.DELETES);
+ }
-
}
Modified: trunk/polepos/src/org/polepos/framework/TurnSetupConfig.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/TurnSetupConfig.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/framework/TurnSetupConfig.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -37,6 +37,8 @@
private final static String CONCURRENCY = "concurrency";
public final static String THREADCOUNT = "threads";
+ public final static String WRITES = "writes";
+ public final static String DELETES = "deletes";
public final static String TIME = "time";
final static String[] AVAILABLE_SETTINGS = new String[]{
@@ -51,6 +53,8 @@
DEPTH,
COMMITINTERVAL,
OBJECTSIZE,
+ WRITES,
+ DELETES,
};
public TurnSetupConfig(String propertiesFileName){
Modified: trunk/polepos/src/org/polepos/reporters/FixedTimeCustomBarRenderer.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/FixedTimeCustomBarRenderer.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/reporters/FixedTimeCustomBarRenderer.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -97,7 +97,7 @@
if(orderOfMagnitude == 1){
return "";
}
- return String.format("- %.1fx", orderOfMagnitude);
+ return String.format("1/%.1fx", orderOfMagnitude);
}
@Override
@@ -108,7 +108,7 @@
if(i > BEST_MAGNITUDE - 1){
return "";
}
- return String.format("- %.0fx", Math.pow(10, BEST_MAGNITUDE - 1 - i));
+ return String.format("1/%.0fx", Math.pow(10, BEST_MAGNITUDE - 1 - i));
}
@Override
Modified: trunk/polepos/src/org/polepos/teams/cobra/CobraDriver.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/cobra/CobraDriver.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/cobra/CobraDriver.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -44,10 +44,6 @@
private transient DatastoreManager mDatastoreManager;
private transient Set newObjects = new HashSet();
- public void configure( Car car, TurnSetup setup) {
- super.configure(car, setup);
- }
-
public void prepare(){
mDatastoreManager = cobraCar().getDatastoreManager();
}
Modified: trunk/polepos/src/org/polepos/teams/db4o/ComplexConcurrencyDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/ComplexConcurrencyDb4o.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/db4o/ComplexConcurrencyDb4o.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -21,25 +21,66 @@
package org.polepos.teams.db4o;
import org.polepos.circuits.complexconcurrency.*;
-import org.polepos.data.*;
+import org.polepos.framework.*;
import com.db4o.config.*;
public class ComplexConcurrencyDb4o extends Db4oDriver implements ComplexConcurrencyDriver {
+ private ComplexDb4o _delegate = new ComplexDb4o();
+
@Override
public void configure(Configuration config) {
- config.objectClass(ComplexHolder2.class).objectField("_i2").indexed(true);
- config.activationDepth(1);
+ _delegate.configure(config);
}
+
+ @Override
+ public void prefillDatabase() {
+ _delegate.write();
+ }
@Override
public void race() {
- ComplexHolder0 holder = ComplexHolder0.generate(depth(), objectCount());
- store(new ComplexRoot(holder));
- commit();
+ int[] ids = new int[writes()];
+ for (int i = 0; i < writes(); i++) {
+ ids[i] = ((Integer)_delegate.write()).intValue();
+ }
+ _delegate.query();
+ for (int i = 0; i < updates(); i++) {
+ _delegate.update(ids[i]);
+ }
+ for (int i = 0; i < deletes(); i++) {
+ _delegate.delete(ids[i]);
+ }
}
+ @Override
+ public void prepare() {
+ _delegate.prepare();
+ }
+ @Override
+ public void prepareDatabase() {
+ _delegate.prepareDatabase();
+ }
+
+ @Override
+ public void configure(Car car, TurnSetup setup) {
+ super.configure(car, setup);
+ _delegate.configure(car, setup);
+ }
+
+ @Override
+ public void closeDatabase() {
+ _delegate.closeDatabase();
+ }
+
+ @Override
+ public ComplexConcurrencyDb4o clone() {
+ ComplexConcurrencyDb4o clone = (ComplexConcurrencyDb4o) super.clone();
+ clone._delegate = new ComplexDb4o();
+ return clone;
+ }
+
}
Modified: trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -32,44 +32,42 @@
public class ComplexDb4o extends Db4oDriver implements Complex {
+ private int _rootId;
+
@Override
- public void write() {
- ComplexHolder0 holder = ComplexHolder0.generate(depth(), objectCount());
- store(new ComplexRoot(holder));
+ public Object write() {
+ ComplexHolder0 holder = ComplexHolder0.generate(depth(), objects());
+ store(holder);
addToCheckSum(holder);
commit();
+ _rootId = (int) db().getID(holder);
+ return _rootId;
}
@Override
public void read() {
- ComplexHolder0 holder = root();
- db().activate(holder, Integer.MAX_VALUE);
+ ComplexHolder0 holder = read(_rootId);
addToCheckSum(holder);
}
+
- private ComplexHolder0 root() {
- ObjectSet<ComplexRoot> result = db().query(ComplexRoot.class);
- if(result.size() != 1) {
- throw new IllegalStateException();
- }
- return result.get(0)._holder;
+ public ComplexHolder0 read(int id) {
+ ComplexHolder0 holder = db().getByID(id);
+ db().activate(holder, Integer.MAX_VALUE);
+ return holder;
}
@Override
public void query() {
- int selectCount = selectCount();
- int firstInt = objectCount() * objectCount() + objectCount();
- int lastInt = firstInt + (objectCount() * objectCount() * objectCount()) - 1;
+ int selectCount = selects();
+ int firstInt = objects() * objects() + objects();
+ int lastInt = firstInt + (objects() * objects() * objects()) - 1;
int currentInt = firstInt;
for (int run = 0; run < selectCount; run++) {
-
Query query = db().query();
query.constrain(ComplexHolder2.class);
query.descend("_i2").constrain(currentInt);
ObjectSet<ComplexHolder2> result = query.execute();
- if(result.size() != 1) {
- throw new IllegalStateException("" + result.size());
- }
ComplexHolder2 holder = result.get(0);
db().activate(holder, 3);
addToCheckSum(holder.ownCheckSum());
@@ -86,12 +84,15 @@
currentInt = firstInt;
}
}
-
}
@Override
public void update() {
- ComplexHolder0 holder = root();
+ update(_rootId);
+ }
+
+ public void update(int id) {
+ ComplexHolder0 holder = read(id);
db().activate(holder, Integer.MAX_VALUE);
holder.traverse(new NullVisitor(),
new Visitor<ComplexHolder0>() {
@@ -110,9 +111,14 @@
});
}
+
@Override
public void delete() {
- ComplexHolder0 holder = root();
+ delete(_rootId);
+ }
+
+ public void delete(int id) {
+ ComplexHolder0 holder = read(id);
db().activate(holder, Integer.MAX_VALUE);
holder.traverse(
new NullVisitor(),
@@ -125,6 +131,7 @@
});
}
+
@Override
public void configure(Configuration config) {
config.objectClass(ComplexHolder2.class).objectField("_i2").indexed(true);
Modified: trunk/polepos/src/org/polepos/teams/db4o/FlatObjectDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/FlatObjectDb4o.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/db4o/FlatObjectDb4o.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -36,7 +36,7 @@
}
public void write(){
- initializeTestId(objectCount());
+ initializeTestId(objects());
while ( hasMoreTestIds()){
IndexedObject indexedObject = new IndexedObject(nextTestId());
store(indexedObject);
@@ -49,7 +49,7 @@
}
public void queryIndexedString() {
- initializeTestId(selectCount());
+ initializeTestId(selects());
while(hasMoreTestIds()) {
Query q = db().query();
q.constrain( IndexedObject.class );
@@ -59,7 +59,7 @@
}
public void queryIndexedInt() {
- initializeTestId(selectCount());
+ initializeTestId(selects());
while(hasMoreTestIds()) {
Query q = db().query();
q.constrain( IndexedObject.class );
@@ -69,7 +69,7 @@
}
public void update() {
- initializeTestId(updateCount());
+ initializeTestId(updates());
while(hasMoreTestIds()) {
Query q = db().query();
q.constrain( IndexedObject.class );
@@ -84,7 +84,7 @@
}
public void delete() {
- initializeTestId(updateCount());
+ initializeTestId(updates());
while(hasMoreTestIds()) {
Query q = db().query();
q.constrain( IndexedObject.class );
Modified: trunk/polepos/src/org/polepos/teams/db4o/NestedListsDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/NestedListsDb4o.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/db4o/NestedListsDb4o.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -32,7 +32,7 @@
@Override
public void create() throws Throwable {
- store(ListHolder.generate(depth(), objectCount(), reuse()));
+ store(ListHolder.generate(depth(), objects(), reuse()));
commit();
}
Added: trunk/polepos/src/org/polepos/teams/hibernate/ComplexConcurrencyHibernate.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/ComplexConcurrencyHibernate.java (rev 0)
+++ trunk/polepos/src/org/polepos/teams/hibernate/ComplexConcurrencyHibernate.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -0,0 +1,81 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+
+package org.polepos.teams.hibernate;
+
+import java.io.*;
+
+import org.polepos.circuits.complexconcurrency.*;
+import org.polepos.framework.*;
+
+public class ComplexConcurrencyHibernate extends HibernateDriver implements ComplexConcurrencyDriver{
+
+ private ComplexHibernate _delegate = new ComplexHibernate();
+
+ @Override
+ public void prefillDatabase() {
+ _delegate.write();
+ }
+
+ @Override
+ public void race() {
+ Serializable[] ids = new Serializable[writes()];
+ for (int i = 0; i < writes(); i++) {
+ ids[i]= (Serializable) _delegate.write();
+ }
+ _delegate.query();
+ for (int i = 0; i < updates(); i++) {
+ _delegate.update(ids[i]);
+ }
+ for (int i = 0; i < deletes(); i++) {
+ _delegate.deleteById(ids[i]);
+ }
+ }
+
+ @Override
+ public void prepare() {
+ _delegate.prepare();
+ }
+
+ @Override
+ public void prepareDatabase() {
+ _delegate.prepareDatabase();
+ }
+
+ @Override
+ public void configure(Car car, TurnSetup setup) {
+ super.configure(car, setup);
+ _delegate.configure(car, setup);
+ }
+
+ @Override
+ public void closeDatabase() {
+ _delegate.closeDatabase();
+ }
+
+
+ @Override
+ public ComplexConcurrencyHibernate clone() {
+ ComplexConcurrencyHibernate clone = (ComplexConcurrencyHibernate) super.clone();
+ clone._delegate = new ComplexHibernate();
+ return clone;
+ }
+
+}
Property changes on: trunk/polepos/src/org/polepos/teams/hibernate/ComplexConcurrencyHibernate.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/polepos/src/org/polepos/teams/hibernate/ComplexHibernate.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/ComplexHibernate.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/hibernate/ComplexHibernate.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -20,6 +20,7 @@
package org.polepos.teams.hibernate;
+import java.io.*;
import java.util.*;
import org.hibernate.*;
@@ -31,39 +32,33 @@
public class ComplexHibernate extends HibernateDriver implements Complex {
+ private Serializable _rootId;
+
@Override
- public void write() {
+ public Object write() {
Transaction tx = begin();
- ComplexHolder0 holder = ComplexHolder0.generate(depth(), objectCount());
+ ComplexHolder0 holder = ComplexHolder0.generate(depth(), objects());
addToCheckSum(holder);
- store(new ComplexRoot(holder));
+ _rootId = store(holder);
tx.commit();
+ return _rootId;
}
@Override
public void read() {
- ComplexHolder0 holder = root();
+ ComplexHolder0 holder = read(_rootId);
addToCheckSum(holder);
}
-
- private ComplexHolder0 root() {
- String query = "from org.polepos.teams.hibernate.data.ComplexRoot";
- Iterator it = db().createQuery(query).iterate();
- if(! it.hasNext()){
- throw new IllegalStateException("no ComplexRoot found");
- }
- ComplexRoot root = (ComplexRoot) it.next();
- if(it.hasNext()){
- throw new IllegalStateException("More than one ComplexRoot found");
- }
- return root.getHolder();
+
+ public ComplexHolder0 read(Serializable _id) {
+ return (ComplexHolder0)db().load(ComplexHolder0.class,_id);
}
@Override
public void query() {
- int selectCount = selectCount();
- int firstInt = objectCount() * objectCount() + objectCount();
- int lastInt = firstInt + (objectCount() * objectCount() * objectCount()) - 1;
+ int selectCount = selects();
+ int firstInt = objects() * objects() + objects();
+ int lastInt = firstInt + (objects() * objects() * objects()) - 1;
int currentInt = firstInt;
for (int run = 0; run < selectCount; run++) {
String query = "from org.polepos.teams.hibernate.data.ComplexHolder2 where i2 = ?";
@@ -73,9 +68,6 @@
}
ComplexHolder2 holder = (ComplexHolder2) it.next();
addToCheckSum(holder.ownCheckSum());
- if(it.hasNext()){
- throw new IllegalStateException("More than one ComplexHolder2 found");
- }
List<ComplexHolder0> children = holder.getChildren();
for (ComplexHolder0 child : children) {
addToCheckSum(child.ownCheckSum());
@@ -93,8 +85,12 @@
@Override
public void update() {
+ update(_rootId);
+ }
+
+ public void update(Serializable id) {
Transaction tx = begin();
- ComplexHolder0 holder = root();
+ ComplexHolder0 holder = read(id);
holder.traverse(new NullVisitor<ComplexHolder0>(),
new Visitor<ComplexHolder0>() {
@Override
@@ -115,7 +111,11 @@
@Override
public void delete() {
- ComplexHolder0 holder = root();
+ deleteById(_rootId);
+ }
+
+ public void deleteById(Serializable id) {
+ ComplexHolder0 holder = read(id);
holder.traverse(
new NullVisitor<ComplexHolder0>(),
new Visitor<ComplexHolder0>() {
@@ -126,5 +126,4 @@
}
});
}
-
}
Modified: trunk/polepos/src/org/polepos/teams/hibernate/FlatObjectHibernate.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/FlatObjectHibernate.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/hibernate/FlatObjectHibernate.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -30,7 +30,7 @@
public void write(){
Transaction tx = begin();
- initializeTestId(objectCount());
+ initializeTestId(objects());
while ( hasMoreTestIds()){
IndexedObject indexedObject = new IndexedObject(nextTestId());
store(indexedObject);
Modified: trunk/polepos/src/org/polepos/teams/hibernate/HibernateDriver.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/HibernateDriver.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/hibernate/HibernateDriver.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -19,6 +19,7 @@
package org.polepos.teams.hibernate;
+import java.io.*;
import java.util.Iterator;
import org.hibernate.*;
@@ -32,10 +33,6 @@
private Session _session;
- public void configure( Car car, TurnSetup setup ){
- super.configure(car, setup);
- }
-
public void prepare() {
_session = hibernateCar().openSession();
}
@@ -136,8 +133,8 @@
return db().beginTransaction();
}
- protected void store(Object obj) {
- db().save(obj);
+ protected Serializable store(Object obj) {
+ return db().save(obj);
}
protected void delete(Object obj) {
Modified: trunk/polepos/src/org/polepos/teams/hibernate/HibernateTeam.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/HibernateTeam.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/hibernate/HibernateTeam.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -69,7 +69,8 @@
new NativeIdsHibernate(),
new CommitsHibernate(),
new ArrayListsHibernate(),
- new StringsHibernate(),
+ new StringsHibernate(),
+ new ComplexConcurrencyHibernate(),
};
}
Modified: trunk/polepos/src/org/polepos/teams/hibernate/NestedListsHibernate.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/NestedListsHibernate.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/hibernate/NestedListsHibernate.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -32,7 +32,7 @@
@Override
public void create() throws Throwable {
Transaction tx = begin();
- store(ListHolder.generate(depth(), objectCount(), reuse()));
+ store(ListHolder.generate(depth(), objects(), reuse()));
tx.commit();
}
Modified: trunk/polepos/src/org/polepos/teams/jdbc/CommitsJdbc.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/CommitsJdbc.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/jdbc/CommitsJdbc.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -23,16 +23,14 @@
import java.sql.*;
import org.polepos.circuits.commits.*;
-import org.polepos.framework.*;
public class CommitsJdbc extends JdbcDriver implements CommitsDriver{
private static final String TABLE = "monaco";
- public void configure(Car car, TurnSetup setup) {
-
- super.configure(car, setup);
+ @Override
+ public void prepareDatabase() {
openConnection();
Added: trunk/polepos/src/org/polepos/teams/jdbc/ComplexConcurrencyJdbc.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/ComplexConcurrencyJdbc.java (rev 0)
+++ trunk/polepos/src/org/polepos/teams/jdbc/ComplexConcurrencyJdbc.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -0,0 +1,78 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+
+package org.polepos.teams.jdbc;
+
+import org.polepos.circuits.complexconcurrency.*;
+import org.polepos.framework.*;
+
+public class ComplexConcurrencyJdbc extends JdbcDriver implements ComplexConcurrencyDriver {
+
+ private ComplexJdbc _delegate = new ComplexJdbc();
+
+ @Override
+ public void prefillDatabase() {
+ _delegate.write();
+ }
+
+ @Override
+ public void race() {
+ int[] ids = new int[writes()];
+ for (int i = 0; i < writes(); i++) {
+ ids[i] = ((Integer)_delegate.write()).intValue();
+ }
+ _delegate.query();
+ for (int i = 0; i < updates(); i++) {
+ _delegate.update(ids[i]);
+ }
+ for (int i = 0; i < deletes(); i++) {
+ _delegate.delete(ids[i]);
+ }
+ }
+
+ @Override
+ public void prepare() {
+ _delegate.prepare();
+ }
+
+ @Override
+ public void prepareDatabase() {
+ _delegate.prepareDatabase();
+ }
+
+ @Override
+ public void configure(Car car, TurnSetup setup) {
+ super.configure(car, setup);
+ _delegate.configure(car, setup);
+ }
+
+ @Override
+ public void closeDatabase() {
+ _delegate.closeDatabase();
+ }
+
+ @Override
+ public ComplexConcurrencyJdbc clone() {
+ ComplexConcurrencyJdbc clone = (ComplexConcurrencyJdbc) super.clone();
+ clone._delegate = new ComplexJdbc(_delegate.idGenerator());
+ return clone;
+ }
+
+}
Property changes on: trunk/polepos/src/org/polepos/teams/jdbc/ComplexConcurrencyJdbc.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -30,8 +30,6 @@
public class ComplexJdbc extends JdbcDriver implements Complex {
- private static final int ROOT_ID = 1;
-
private static final String HOLDER_TABLE0 = "complexHolderJdbc0";
private static final String[] HOLDER_TABLES = new String[]{
@@ -55,22 +53,26 @@
private static final int CHILD = 2;
- private static final int POS = 3;
-
private IdGenerator _idGenerator;
- public void configure(Car car, TurnSetup setup) {
-
- super.configure(car, setup);
+ private int _rootId;
+
+ public ComplexJdbc() {
+ _idGenerator = new IdGenerator(1);
+ }
+
+ public ComplexJdbc(IdGenerator idGenerator){
+ _idGenerator = idGenerator;
+ }
+
+ @Override
+ public void prepareDatabase() {
openConnection();
-
dropTable(HOLDER_TABLE0);
dropTable(CHILDREN_TABLE);
dropTable(ARRAY_TABLE);
-
createTable( HOLDER_TABLE0, new String[]{ "id", "name", "type" },
new Class[]{Integer.TYPE, String.class, Integer.TYPE} );
-
createTable(CHILDREN_TABLE,
new String[]{ "parent", "child", "pos"},
new Class[] {Integer.TYPE, Integer.TYPE, Integer.TYPE},
@@ -78,7 +80,6 @@
createIndex( CHILDREN_TABLE, "parent" );
createIndex( CHILDREN_TABLE, "child" );
createIndex( CHILDREN_TABLE, "pos" );
-
createTable(ARRAY_TABLE,
new String[]{ "parent", "child", "pos"},
new Class[] {Integer.TYPE, Integer.TYPE, Integer.TYPE},
@@ -86,7 +87,6 @@
createIndex( ARRAY_TABLE, "parent" );
createIndex( ARRAY_TABLE, "child" );
createIndex( ARRAY_TABLE, "pos" );
-
int i = 1;
for(String table : HOLDER_TABLES){
dropTable( table);
@@ -98,14 +98,11 @@
i++;
}
close();
-
}
@Override
- public void write() {
- _idGenerator = new IdGenerator(ROOT_ID);
+ public Object write() {
final Stack<Integer> parentIds = new Stack<Integer>();
-
final PreparedStatement complexHolder0Stat = prepareStatement("insert into " + HOLDER_TABLE0 + " (id, name, type) values (?,?,?)");
final PreparedStatement[] complexHolderStats = new PreparedStatement[4];
for (int i = 0; i < complexHolderStats.length; i++) {
@@ -115,18 +112,17 @@
}
final PreparedStatement arrayStat = prepareStatement("insert into tarray (parent, child, pos) values (?,?,?)");
final PreparedStatement childrenStat = prepareStatement("insert into children (parent, child, pos) values (?,?,?)");
-
final Map<ComplexHolder0,Integer> ids = new HashMap<ComplexHolder0, Integer>();
- ComplexHolder0 holder = ComplexHolder0.generate(depth(), objectCount());
+ ComplexHolder0 holder = ComplexHolder0.generate(depth(), objects());
addToCheckSum(holder);
holder.traverse(new Visitor<ComplexHolder0>() {
@Override
public void visit(ComplexHolder0 holder) {
int id = (int) _idGenerator.nextId();
+ holder.setId(id);
ids.put(holder, id);
try {
int type = 0;
-
if(holder instanceof ComplexHolder1){
type=1;
complexHolderStats[0].setInt(1, id);
@@ -134,7 +130,6 @@
complexHolderStats[0].setInt(2, complexHolder1._i1);
complexHolderStats[0].addBatch();
}
-
if(holder instanceof ComplexHolder2){
type=2;
complexHolderStats[1].setInt(1, id);
@@ -142,7 +137,6 @@
complexHolderStats[1].setInt(2, complexHolder2._i2);
complexHolderStats[1].addBatch();
}
-
if(holder instanceof ComplexHolder3){
type=3;
complexHolderStats[2].setInt(1, id);
@@ -150,7 +144,6 @@
complexHolderStats[2].setInt(2, complexHolder3._i3);
complexHolderStats[2].addBatch();
}
-
if(holder instanceof ComplexHolder4){
type =4;
complexHolderStats[3].setInt(1, id);
@@ -158,14 +151,10 @@
complexHolderStats[3].setInt(2, complexHolder4._i4);
complexHolderStats[3].addBatch();
}
-
complexHolder0Stat.setInt(ID, id);
complexHolder0Stat.setString(NAME, holder.getName());
complexHolder0Stat.setInt(TYPE, type);
complexHolder0Stat.addBatch();
-
-
-
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
@@ -206,10 +195,8 @@
}
}
}
-
}
});
-
try {
complexHolder0Stat.executeBatch();
complexHolder0Stat.close();
@@ -221,23 +208,21 @@
childrenStat.close();
arrayStat.executeBatch();
arrayStat.close();
-
-
} catch (Exception e) {
throw new RuntimeException(e);
}
-
commit();
-
+ _rootId = holder.getId();
+ return _rootId;
}
@Override
public void read() {
- addToCheckSum(readRootInternal());
+ addToCheckSum(read(_rootId));
}
-
- private ComplexHolder0 readRootInternal() {
- return readHolder(Integer.MAX_VALUE, ROOT_ID);
+
+ public ComplexHolder0 read(int id) {
+ return readHolder(Integer.MAX_VALUE, id);
}
private ComplexHolder0 readHolder(int depth, int id) {
@@ -252,7 +237,6 @@
}
final PreparedStatement arrayStat = prepareStatement("select * from " + ARRAY_TABLE + " where parent=? order by pos");
final PreparedStatement childrenStat = prepareStatement("select * from " + CHILDREN_TABLE + " where parent=? order by pos");
-
Map<Integer, ComplexHolder0> idToInstance = new HashMap<Integer, ComplexHolder0>();
holder = readHolder(
depth,
@@ -262,12 +246,10 @@
arrayStat,
childrenStat,
id);
-
complexHolder0Stat.close();
for (int i = 0; i < complexHolderStats.length; i++) {
complexHolderStats[i].close();
}
-
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -295,10 +277,8 @@
ComplexHolder0 holder = holderFromType(type);
holder.setId(id);
read.put(id, holder);
-
holder.setName(resultSet0.getString(NAME));
close(resultSet0);
-
if(holder instanceof ComplexHolder1){
ComplexHolder1 complexHolder1 = (ComplexHolder1) holder;
complexHolderStats[0].setInt(1, id);
@@ -306,7 +286,6 @@
complexHolder1._i1 = resultSet1.getInt(INT_FIELD);
close(resultSet1);
}
-
if(holder instanceof ComplexHolder2){
ComplexHolder2 complexHolder2 = (ComplexHolder2) holder;
complexHolderStats[1].setInt(1, id);
@@ -314,7 +293,6 @@
complexHolder2._i2 = resultSet2.getInt(INT_FIELD);
close(resultSet2);
}
-
if(holder instanceof ComplexHolder3){
ComplexHolder3 complexHolder3 = (ComplexHolder3) holder;
complexHolderStats[2].setInt(1, id);
@@ -322,7 +300,6 @@
complexHolder3._i3 = resultSet3.getInt(INT_FIELD);
close(resultSet3);
}
-
if(holder instanceof ComplexHolder4){
ComplexHolder4 complexHolder4 = (ComplexHolder4) holder;
complexHolderStats[3].setInt(1, id);
@@ -352,7 +329,6 @@
}
}
arrayResultSet.close();
-
childrenStat.setInt(1, id);
ResultSet childrenResultSet = childrenStat.executeQuery();
List<Integer> childrenIds = new ArrayList<Integer>();
@@ -375,7 +351,6 @@
}
childrenResultSet.close();
return holder;
-
}
private ComplexHolder0 holderFromType(int type) {
@@ -392,14 +367,10 @@
return new ComplexHolder4();
default:
throw new IllegalStateException("Valid type int 0 to 4 expected. Found:" + type);
-
}
}
private void close(ResultSet resultSet) throws SQLException {
- if(resultSet.next()){
- throw new IllegalStateException("More than one complexHolder0 found.");
- }
resultSet.close();
}
@@ -414,9 +385,9 @@
@Override
public void query() {
- int selectCount = selectCount();
- int firstInt = objectCount() * objectCount() + objectCount();
- int lastInt = firstInt + (objectCount() * objectCount() * objectCount()) - 1;
+ int selectCount = selects();
+ int firstInt = objects() * objects() + objects();
+ int lastInt = firstInt + (objects() * objects() * objects()) - 1;
int currentInt = firstInt;
for (int run = 0; run < selectCount; run++) {
StringBuilder sb = new StringBuilder();
@@ -432,8 +403,6 @@
sb.append(" where " + HOLDER_TABLES[1] + ".i2 = ?");
PreparedStatement stat = prepareStatement(sb.toString());
-
-
try {
stat.setInt(1, currentInt);
ResultSet resultSet = executeQuery(stat);
@@ -460,13 +429,17 @@
}
}
}
-
+
@Override
public void update() {
+ update(_rootId);
+ }
+
+ public void update(int id) {
final PreparedStatement nameStat = prepareStatement("update " + HOLDER_TABLE0 + " set name=? where id=?");
final PreparedStatement arrayDeleteStat = prepareStatement("delete from " + ARRAY_TABLE + " where parent = ?");
final PreparedStatement arrayInsertStat = prepareStatement("insert into tarray (parent, child, pos) values (?,?,?)");
- ComplexHolder0 holder = readRootInternal();
+ ComplexHolder0 holder = read(id);
holder.traverse(new NullVisitor(),
new Visitor<ComplexHolder0>(){
@Override
@@ -503,9 +476,13 @@
commit();
}
-
+
@Override
public void delete() {
+ delete(_rootId);
+ }
+
+ public void delete(int id) {
final PreparedStatement[] complexHolderStats = new PreparedStatement[5];
complexHolderStats[0] = prepareStatement("delete from " + HOLDER_TABLE0 + " where id=?");
for (int i = 1; i < complexHolderStats.length; i++) {
@@ -514,8 +491,7 @@
}
final PreparedStatement arrayDeleteStat = prepareStatement("delete from " + ARRAY_TABLE + " where parent=?");
final PreparedStatement childrenStat = prepareStatement("delete from " + CHILDREN_TABLE + " where parent=?");
-
- ComplexHolder0 holder = readRootInternal();
+ ComplexHolder0 holder = read(id);
holder.traverse(new NullVisitor(),
new Visitor<ComplexHolder0>(){
@Override
@@ -549,8 +525,11 @@
throw new RuntimeException(e);
}
commit();
-
}
+
+ public IdGenerator idGenerator(){
+ return _idGenerator;
+ }
}
Modified: trunk/polepos/src/org/polepos/teams/jdbc/FlatObjectJdbc.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/FlatObjectJdbc.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/jdbc/FlatObjectJdbc.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -38,8 +38,8 @@
- public void configure(Car car, TurnSetup setup) {
- super.configure(car, setup);
+ @Override
+ public void prepareDatabase() {
openConnection();
dropTable("flatobject");
@@ -61,7 +61,7 @@
}
public void write() throws SQLException{
- initializeTestId(objectCount());
+ initializeTestId(objects());
PreparedStatement preparedStatement = prepareStatement("insert into flatobject (fid, fint, fstring) values (?,?,?)");
while ( hasMoreTestIds() ){
IndexedObject indexedObject = new IndexedObject(nextTestId());
Modified: trunk/polepos/src/org/polepos/teams/jdbc/InheritanceHierarchyJdbc.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/InheritanceHierarchyJdbc.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/jdbc/InheritanceHierarchyJdbc.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -37,9 +37,8 @@
"inheritanceHierarchyJdbc4",
};
- public void configure(Car car, TurnSetup setup) {
-
- super.configure(car, setup);
+ @Override
+ public void prepareDatabase() {
openConnection();
for (int i = TABLES.length - 1; i >= 0; i--) {
Modified: trunk/polepos/src/org/polepos/teams/jdbc/JdbcDriver.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/JdbcDriver.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/jdbc/JdbcDriver.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -24,7 +24,6 @@
import org.polepos.*;
import org.polepos.data.*;
-import org.polepos.framework.*;
public abstract class JdbcDriver extends org.polepos.framework.DriverBase {
@@ -70,7 +69,6 @@
}
protected void performPreparedQuery(PreparedStatement stat, Object arg) {
- Log.logger.fine("starting query"); // NOI18N
ResultSet rs = null;
try {
stat.setObject(1, arg);
@@ -99,7 +97,6 @@
}
protected <Value> void performSingleResultQuery(String sql,List<Value> values) {
- Log.logger.fine( "starting query" ); //NOI18N
PreparedStatement stat=prepareStatement(sql);
try {
for(Value val : values) {
Modified: trunk/polepos/src/org/polepos/teams/jdbc/JdbcTeam.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/JdbcTeam.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/jdbc/JdbcTeam.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -60,7 +60,8 @@
new ComplexJdbc(),
new TreesJdbc(),
new NativeIdsJdbc(),
- new CommitsJdbc()
+ new CommitsJdbc(),
+ new ComplexConcurrencyJdbc(),
};
}
Modified: trunk/polepos/src/org/polepos/teams/jdbc/NativeIdsJdbc.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/NativeIdsJdbc.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/jdbc/NativeIdsJdbc.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -33,8 +33,8 @@
private static final String TABLE = "sanmarino";
- public void configure(Car car, TurnSetup setup) {
- super.configure(car, setup);
+ @Override
+ public void prepareDatabase() {
openConnection();
dropTable( TABLE);
Modified: trunk/polepos/src/org/polepos/teams/jdbc/NestedListsJdbc.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/NestedListsJdbc.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/jdbc/NestedListsJdbc.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -45,9 +45,8 @@
private int _rootId;
- public void configure(Car car, TurnSetup setup) {
-
- super.configure(car, setup);
+ @Override
+ public void prepareDatabase() {
openConnection();
dropTable(LISTHOLDER_TABLE);
@@ -82,7 +81,7 @@
final PreparedStatement listStatement =
prepareStatement("insert into " + LIST_TABLE + " (fid, fitem, felement) values (?,?,?)");
- ListHolder root = ListHolder.generate(depth(), objectCount(), reuse());
+ ListHolder root = ListHolder.generate(depth(), objects(), reuse());
_rootId = (int) root.id();
root.accept(new Visitor<ListHolder>() {
Modified: trunk/polepos/src/org/polepos/teams/jdbc/TreesJdbc.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/TreesJdbc.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/jdbc/TreesJdbc.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -30,8 +30,8 @@
private static final String TABLE = "malaysia";
- public void configure(Car car, TurnSetup setup){
- super.configure(car, setup);
+ @Override
+ public void prepareDatabase() {
openConnection();
dropTable( TABLE );
createTable( TABLE, new String[]{ "id", "preceding", "subsequent", "name", "depth" }, new Class[]{Integer.TYPE,Integer.TYPE,Integer.TYPE,String.class, Integer.TYPE} );
Modified: trunk/polepos/src/org/polepos/teams/jdo/ComplexConcurrencyJdo.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdo/ComplexConcurrencyJdo.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/jdo/ComplexConcurrencyJdo.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -21,16 +21,60 @@
package org.polepos.teams.jdo;
import org.polepos.circuits.complexconcurrency.*;
-import org.polepos.teams.jdo.data.*;
+import org.polepos.framework.*;
public class ComplexConcurrencyJdo extends JdoDriver implements ComplexConcurrencyDriver {
+ private ComplexJdo _delegate = new ComplexJdo();
+
@Override
+ public void prefillDatabase() {
+ _delegate.write();
+ }
+
+ @Override
public void race() {
- begin();
- ComplexHolder0 holder = ComplexHolder0.generate(depth(), objectCount());
- store(new ComplexRoot(holder));
- commit();
+ Object[] ids = new Object[writes()];
+ for (int i = 0; i < writes(); i++) {
+ ids[i] = _delegate.write();
+ }
+ _delegate.query();
+ for (int i = 0; i < updates(); i++) {
+ _delegate.update(ids[i]);
+ }
+ for (int i = 0; i < deletes(); i++) {
+ _delegate.deleteById(ids[i]);
+ }
}
+
+ @Override
+ public void prepare() {
+ _delegate.prepare();
+ }
+
+ @Override
+ public void prepareDatabase() {
+ _delegate.prepareDatabase();
+ }
+
+ @Override
+ public void configure(Car car, TurnSetup setup) {
+ super.configure(car, setup);
+ _delegate.configure(car, setup);
+ }
+
+ @Override
+ public void closeDatabase() {
+ _delegate.closeDatabase();
+ }
+
+ @Override
+ public ComplexConcurrencyJdo clone() {
+ ComplexConcurrencyJdo clone = (ComplexConcurrencyJdo) super.clone();
+ clone._delegate = new ComplexJdo();
+ return clone;
+ }
+
+
}
Modified: trunk/polepos/src/org/polepos/teams/jdo/ComplexJdo.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdo/ComplexJdo.java 2011-02-17 19:28:39 UTC (rev 189)
+++ trunk/polepos/src/org/polepos/teams/jdo/ComplexJdo.java 2011-02-18 18:44:02 UTC (rev 190)
@@ -31,46 +31,38 @@
public class ComplexJdo extends JdoDriver implements Complex {
+ private Object _rootId;
+
@Override
- public void write() {
+ public Object write() {
begin();
- ComplexHolder0 holder = ComplexHolder0.generate(depth(), objectCount());
+ ComplexHolder0 holder = ComplexHolder0.generate(depth(), objects());
addToCheckSum(holder);
- store(new ComplexRoot(holder));
+ store(holder);
+ _rootId = db().getObjectId(holder);
commit();
+ return _rootId;
}
@Override
public void read() {
- beginRead();
- ComplexHolder0 holder = rootHolder();
+ begin();
+ ComplexHolder0 holder = read(_rootId);
addToCheckSum(holder);
}
-
- private ComplexHolder0 rootHolder() {
- return root().getHolder();
+
+ public ComplexHolder0 read(Object id) {
+ begin();
+ return (ComplexHolder0) db().getObjectById(id);
}
- private ComplexRoot root() {
- Query query = db().newQuery(ComplexRoot.class);
- Collection result = (Collection) query.execute();
- Iterator it = result.iterator();
- if(! it.hasNext()){
- throw new IllegalStateException("no ComplexRoot found");
- }
- ComplexRoot root = (ComplexRoot) it.next();
- if(it.hasNext()){
- throw new IllegalStateException("More than one ComplexRoot found");
- }
- return root;
- }
@Override
public void query() {
- beginRead();
- int selectCount = selectCount();
- int firstInt = objectCount() * objectCount() + objectCount();
- int lastInt = firstInt + (objectCount() * objectCount() * objectCount()) - 1;
+ begin();
+ int selectCount = selects();
+ int firstInt = objects() * objects() + objects();
+ int lastInt = firstInt + (objects() * objects() * objects()) - 1;
int currentInt = firstInt;
for (int run = 0; run < selectCount; run++) {
String filter = "this.i2 == param";
@@ -83,9 +75,6 @@
}
ComplexHolder2 holder = (ComplexHolder2) it.next();
addToCheckSum(holder.ownCheckSum());
- if(it.hasNext()){
- throw new IllegalStateException("More than one ComplexHolder2 found");
- }
List<ComplexHolder0> children = holder.getChildren();
for (ComplexHolder0 child : children) {
addToCheckSum(child.ownCheckSum());
@@ -104,8 +93,12 @@
@Override
public void update() {
+ update(_rootId);
+ }
+
+ public void update(Object id) {
begin();
- ComplexHolder0 holder = rootHolder();
+ ComplexHolder0 holder = read...
[truncated message content] |