Revision: 192
http://polepos.svn.sourceforge.net/polepos/?rev=192&view=rev
Author: carlrosenberger
Date: 2011-02-22 13:15:56 +0000 (Tue, 22 Feb 2011)
Log Message:
-----------
cr + pr: Improvement to complex concurrency: Update data is now distinct to the threads.
Modified Paths:
--------------
trunk/polepos/settings/Jdo.properties
trunk/polepos/src/org/polepos/data/ComplexHolder0.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/hibernate/ComplexConcurrencyHibernate.java
trunk/polepos/src/org/polepos/teams/hibernate/ComplexHibernate.java
trunk/polepos/src/org/polepos/teams/hibernate/data/ComplexHolder0.java
trunk/polepos/src/org/polepos/teams/jdbc/ComplexConcurrencyJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.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/data/ComplexHolder0.java
Modified: trunk/polepos/settings/Jdo.properties
===================================================================
--- trunk/polepos/settings/Jdo.properties 2011-02-18 19:10:29 UTC (rev 191)
+++ trunk/polepos/settings/Jdo.properties 2011-02-22 13:15:56 UTC (rev 192)
@@ -23,10 +23,10 @@
datanucleus.color=0x146879
#
# Embedded
-datanucleus.jdbc=hsqldb
+# datanucleus.jdbc=hsqldb
#
# Client/Server
-# datanucleus.jdbc=mysql
+datanucleus.jdbc=mysql
#
Modified: trunk/polepos/src/org/polepos/data/ComplexHolder0.java
===================================================================
--- trunk/polepos/src/org/polepos/data/ComplexHolder0.java 2011-02-18 19:10:29 UTC (rev 191)
+++ trunk/polepos/src/org/polepos/data/ComplexHolder0.java 2011-02-22 13:15:56 UTC (rev 192)
@@ -37,15 +37,16 @@
private ComplexHolder0[] _array;
- public static ComplexHolder0 generate(int depth, int leafs){
+ public static ComplexHolder0 generate(int depth, int leafs, boolean disjunctSpecial){
ComplexHolder0 complexHolder = new ComplexHolder0();
complexHolder._name = "root";
- createChildren(complexHolder, depth -1, leafs);
+ int specialValue = disjunctSpecial ? (int) Math.pow(leafs, depth) : 0;
+ createChildren(complexHolder, depth -1, leafs, specialValue);
return complexHolder;
}
- private static void createChildren(ComplexHolder0 root, int depth, int numChildren) {
+ private static void createChildren(ComplexHolder0 root, int depth, int numChildren, int specialValue) {
if(depth < 1){
return;
}
@@ -62,7 +63,7 @@
ComplexHolder0 curChild = curFactory.run();
curChild._name = String.valueOf(holderIdx);
curChild._array = createArray(holderIdx);
- curChild.setSpecial(holderIdx);
+ curChild.setSpecial(holderIdx + specialValue);
curParent.addChild(curChild);
childLevel.add(curChild);
previous = curChild;
Modified: trunk/polepos/src/org/polepos/teams/db4o/ComplexConcurrencyDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/ComplexConcurrencyDb4o.java 2011-02-18 19:10:29 UTC (rev 191)
+++ trunk/polepos/src/org/polepos/teams/db4o/ComplexConcurrencyDb4o.java 2011-02-22 13:15:56 UTC (rev 192)
@@ -43,7 +43,7 @@
public void race() {
int[] ids = new int[writes()];
for (int i = 0; i < writes(); i++) {
- ids[i] = ((Integer)_delegate.write()).intValue();
+ ids[i] = ((Integer)_delegate.write(true)).intValue();
}
_delegate.query();
for (int i = 0; i < updates(); i++) {
Modified: trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java 2011-02-18 19:10:29 UTC (rev 191)
+++ trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java 2011-02-22 13:15:56 UTC (rev 192)
@@ -34,9 +34,14 @@
private int _rootId;
+
@Override
public Object write() {
- ComplexHolder0 holder = ComplexHolder0.generate(depth(), objects());
+ return write(false);
+ }
+
+ public Object write(boolean disjunctSpecial) {
+ ComplexHolder0 holder = ComplexHolder0.generate(depth(), objects(), disjunctSpecial);
store(holder);
addToCheckSum(holder);
commit();
Modified: trunk/polepos/src/org/polepos/teams/hibernate/ComplexConcurrencyHibernate.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/ComplexConcurrencyHibernate.java 2011-02-18 19:10:29 UTC (rev 191)
+++ trunk/polepos/src/org/polepos/teams/hibernate/ComplexConcurrencyHibernate.java 2011-02-22 13:15:56 UTC (rev 192)
@@ -38,7 +38,7 @@
public void race() {
Serializable[] ids = new Serializable[writes()];
for (int i = 0; i < writes(); i++) {
- ids[i]= (Serializable) _delegate.write();
+ ids[i]= (Serializable) _delegate.write(true);
}
_delegate.query();
for (int i = 0; i < updates(); i++) {
Modified: trunk/polepos/src/org/polepos/teams/hibernate/ComplexHibernate.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/ComplexHibernate.java 2011-02-18 19:10:29 UTC (rev 191)
+++ trunk/polepos/src/org/polepos/teams/hibernate/ComplexHibernate.java 2011-02-22 13:15:56 UTC (rev 192)
@@ -36,8 +36,12 @@
@Override
public Object write() {
+ return write(false);
+ }
+
+ public Object write(boolean disjunctSpecial) {
Transaction tx = begin();
- ComplexHolder0 holder = ComplexHolder0.generate(depth(), objects());
+ ComplexHolder0 holder = ComplexHolder0.generate(depth(), objects(), disjunctSpecial);
addToCheckSum(holder);
_rootId = store(holder);
tx.commit();
Modified: trunk/polepos/src/org/polepos/teams/hibernate/data/ComplexHolder0.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/data/ComplexHolder0.java 2011-02-18 19:10:29 UTC (rev 191)
+++ trunk/polepos/src/org/polepos/teams/hibernate/data/ComplexHolder0.java 2011-02-22 13:15:56 UTC (rev 192)
@@ -42,14 +42,15 @@
id = _idGenerator.nextId();
}
- public static ComplexHolder0 generate(int depth, int leafs){
+ public static ComplexHolder0 generate(int depth, int leafs, boolean disjunctSpecial){
ComplexHolder0 complexHolder = new ComplexHolder0();
complexHolder.name = "root";
- createChildren(complexHolder, depth -1, leafs);
+ int specialValue = disjunctSpecial ? (int) Math.pow(leafs, depth) : 0;
+ createChildren(complexHolder, depth -1, leafs, specialValue);
return complexHolder;
}
- private static void createChildren(ComplexHolder0 root, int depth, int numChildren) {
+ private static void createChildren(ComplexHolder0 root, int depth, int numChildren, int specialValue) {
if(depth < 1){
return;
}
@@ -65,7 +66,7 @@
ComplexHolder0 curChild = curFactory.run();
curChild.name = String.valueOf(holderIdx);
curChild.array = createArray(holderIdx);
- curChild.setSpecial(holderIdx);
+ curChild.setSpecial(holderIdx + specialValue);
curParent.addChild(curChild);
childLevel.add(curChild);
holderIdx++;
Modified: trunk/polepos/src/org/polepos/teams/jdbc/ComplexConcurrencyJdbc.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/ComplexConcurrencyJdbc.java 2011-02-18 19:10:29 UTC (rev 191)
+++ trunk/polepos/src/org/polepos/teams/jdbc/ComplexConcurrencyJdbc.java 2011-02-22 13:15:56 UTC (rev 192)
@@ -36,7 +36,7 @@
public void race() {
int[] ids = new int[writes()];
for (int i = 0; i < writes(); i++) {
- ids[i] = ((Integer)_delegate.write()).intValue();
+ ids[i] = ((Integer)_delegate.write(true)).intValue();
}
_delegate.query();
for (int i = 0; i < updates(); i++) {
Modified: trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java 2011-02-18 19:10:29 UTC (rev 191)
+++ trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java 2011-02-22 13:15:56 UTC (rev 192)
@@ -102,6 +102,11 @@
@Override
public Object write() {
+ return write(false);
+ }
+
+
+ public Object write(boolean disjunctSpecial) {
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];
@@ -113,7 +118,7 @@
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(), objects());
+ ComplexHolder0 holder = ComplexHolder0.generate(depth(), objects(), disjunctSpecial);
addToCheckSum(holder);
holder.traverse(new Visitor<ComplexHolder0>() {
@Override
@@ -238,14 +243,7 @@
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,
- idToInstance,
- complexHolder0Stat,
- complexHolderStats,
- arrayStat,
- childrenStat,
- id);
+ holder = readHolder(depth,idToInstance,complexHolder0Stat,complexHolderStats,arrayStat,childrenStat, id);
complexHolder0Stat.close();
for (int i = 0; i < complexHolderStats.length; i++) {
complexHolderStats[i].close();
@@ -466,10 +464,17 @@
try {
nameStat.executeBatch();
nameStat.close();
+
arrayDeleteStat.executeBatch();
arrayDeleteStat.close();
+
+ // Without this commit we get deadlocks
+ // in the concurrency runs
+ commit();
+
arrayInsertStat.executeBatch();
arrayInsertStat.close();
+
} catch (Exception e) {
throw new RuntimeException(e);
}
Modified: trunk/polepos/src/org/polepos/teams/jdo/ComplexConcurrencyJdo.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdo/ComplexConcurrencyJdo.java 2011-02-18 19:10:29 UTC (rev 191)
+++ trunk/polepos/src/org/polepos/teams/jdo/ComplexConcurrencyJdo.java 2011-02-22 13:15:56 UTC (rev 192)
@@ -36,7 +36,7 @@
public void race() {
Object[] ids = new Object[writes()];
for (int i = 0; i < writes(); i++) {
- ids[i] = _delegate.write();
+ ids[i] = _delegate.write(true);
}
_delegate.query();
for (int i = 0; i < updates(); i++) {
Modified: trunk/polepos/src/org/polepos/teams/jdo/ComplexJdo.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdo/ComplexJdo.java 2011-02-18 19:10:29 UTC (rev 191)
+++ trunk/polepos/src/org/polepos/teams/jdo/ComplexJdo.java 2011-02-22 13:15:56 UTC (rev 192)
@@ -35,8 +35,12 @@
@Override
public Object write() {
+ return write(false);
+ }
+
+ public Object write(boolean disjunctSpecial) {
begin();
- ComplexHolder0 holder = ComplexHolder0.generate(depth(), objects());
+ ComplexHolder0 holder = ComplexHolder0.generate(depth(), objects(), disjunctSpecial);
addToCheckSum(holder);
store(holder);
_rootId = db().getObjectId(holder);
@@ -44,6 +48,7 @@
return _rootId;
}
+
@Override
public void read() {
begin();
Modified: trunk/polepos/src/org/polepos/teams/jdo/data/ComplexHolder0.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdo/data/ComplexHolder0.java 2011-02-18 19:10:29 UTC (rev 191)
+++ trunk/polepos/src/org/polepos/teams/jdo/data/ComplexHolder0.java 2011-02-22 13:15:56 UTC (rev 192)
@@ -38,14 +38,15 @@
}
- public static ComplexHolder0 generate(int depth, int leafs){
+ public static ComplexHolder0 generate(int depth, int leafs, boolean disjunctSpecial){
ComplexHolder0 complexHolder = new ComplexHolder0();
complexHolder.name = "root";
- createChildren(complexHolder, depth -1, leafs);
+ int specialValue = disjunctSpecial ? (int) Math.pow(leafs, depth) : 0;
+ createChildren(complexHolder, depth -1, leafs, specialValue);
return complexHolder;
}
- private static void createChildren(ComplexHolder0 root, int depth, int numChildren) {
+ private static void createChildren(ComplexHolder0 root, int depth, int numChildren, int specialValue) {
if(depth < 1){
return;
}
@@ -61,7 +62,7 @@
ComplexHolder0 curChild = curFactory.run();
curChild.name = String.valueOf(holderIdx);
curChild.array = createArray(holderIdx);
- curChild.setSpecial(holderIdx);
+ curChild.setSpecial(holderIdx + specialValue);
curParent.addChild(curChild);
childLevel.add(curChild);
holderIdx++;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|