You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/07/13 15:31:47 UTC
svn commit: r1146007 - in /incubator/jena/Experimental/TxTDB/trunk:
src-dev/tx/ src/main/java/com/hp/hpl/jena/tdb/
src/main/java/com/hp/hpl/jena/tdb/base/recordbuffer/
src/main/java/com/hp/hpl/jena/tdb/store/
src/main/java/com/hp/hpl/jena/tdb/sys/ src/...
Author: andy
Date: Wed Jul 13 13:31:46 2011
New Revision: 1146007
URL: http://svn.apache.org/viewvc?rev=1146007&view=rev
Log: (empty)
Modified:
incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java
incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/StoreConnection.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/recordbuffer/RecordRangeIterator.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetPrefixesTDB.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/DatasetControlMRSW.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/BlockMgrJournal.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetBuilderTxn.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/ObjectFileTrans.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transactional.java
incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/AbstractTestNodeTableTrans.java
incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/AbstractTestObjectFileTrans.java
Modified: incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java Wed Jul 13 13:31:46 2011
@@ -19,15 +19,25 @@ public class DevTx
// TripleTable, QuadTable, DatasetPrefixesTDB are just function-adding wrappers.
// Then readonly NodeTupleTable. Remove NodeTableBuilderReadonly
+ // ** Remove iterator tracking - too many nested iterator structures to make it reliable.
+ // All would have to be closeable, including every Iter anon one. Hard to make reliable.
+ // Remove from transaction
+ // ??Remove from BlockMgrJournal and BlockMgr?
+ // Rely on read/release of blocks.
+
// ConcurrencyPolicy -> DatasetControl
// .resetControl, remove .setReadMode
+ // ?? Journal for BlockMgrs only.
+ // System journal is just commits/aborts.
+
// NodeTable journalling and recovery
// 3/ general setup
// Replay ==> JournalCtl.
// warmReplay, coldReplay
// Dataset API
- // DatasetGraphAPI - everything some kinds of transaction?
+ // DatasetGraphAPI - everything some kinds of transaction?
+
// Iterator tracking.
// DatasetGraphTDB.find*, prefixes, OpExecutorTDB.OpExecutorPlainTDB=>SolverLib.execute
// OpExecutorTDB.OpExecutorPlainTDB
Modified: incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java Wed Jul 13 13:31:46 2011
@@ -11,7 +11,6 @@ import org.openjena.atlas.lib.FileOps ;
import org.openjena.atlas.logging.Log ;
import com.hp.hpl.jena.graph.Graph ;
-import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.query.DatasetFactory ;
import com.hp.hpl.jena.query.Query ;
import com.hp.hpl.jena.query.QueryExecution ;
@@ -21,25 +20,14 @@ import com.hp.hpl.jena.query.Syntax ;
import com.hp.hpl.jena.rdf.model.Model ;
import com.hp.hpl.jena.rdf.model.ModelFactory ;
import com.hp.hpl.jena.sparql.core.DatasetGraph ;
-import com.hp.hpl.jena.sparql.util.NodeFactory ;
import com.hp.hpl.jena.sparql.util.QueryExecUtils ;
import com.hp.hpl.jena.tdb.DatasetGraphTxn ;
import com.hp.hpl.jena.tdb.ReadWrite ;
import com.hp.hpl.jena.tdb.StoreConnection ;
-import com.hp.hpl.jena.tdb.TDBFactory ;
-import com.hp.hpl.jena.tdb.base.file.FileFactory ;
-import com.hp.hpl.jena.tdb.base.objectfile.ObjectFile ;
import com.hp.hpl.jena.tdb.base.record.Record ;
import com.hp.hpl.jena.tdb.base.record.RecordFactory ;
-import com.hp.hpl.jena.tdb.index.Index ;
-import com.hp.hpl.jena.tdb.index.IndexMap ;
-import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
-import com.hp.hpl.jena.tdb.nodetable.NodeTableInline ;
import com.hp.hpl.jena.tdb.setup.DatasetBuilderStd ;
import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
-import com.hp.hpl.jena.tdb.store.NodeId ;
-import com.hp.hpl.jena.tdb.sys.SystemTDB ;
-import com.hp.hpl.jena.tdb.transaction.NodeTableTrans ;
import com.hp.hpl.jena.update.UpdateAction ;
import com.hp.hpl.jena.update.UpdateFactory ;
import com.hp.hpl.jena.update.UpdateRequest ;
@@ -67,29 +55,45 @@ public class TxMain
public static void main(String... args)
{
- //initFS() ;
- //** Leaving journals behind after replay.
+ initFS() ;
StoreConnection sConn = StoreConnection.make(DBdir) ;
// Take a blocking read connection.
- DatasetGraphTxn dsgRead = sConn.begin(ReadWrite.READ) ;
-
+ DatasetGraphTxn dsgRead = sConn.begin(ReadWrite.READ) ; // Optional label.
+
DatasetGraphTxn dsg = sConn.begin(ReadWrite.WRITE) ;
- load("D.ttl", dsg) ;
- query("DSG1", "SELECT (count(*) AS ?C) { ?s ?p ?o }", dsg) ;
+ load("D.ttl", dsg) ; // Loads 3 triples
+ query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsg) ;
+
+ dsg.commit() ;
+ dsg.close() ;
+
+
+ // Reader still open.
+ // At this point, there is a blocking
+
+ dsg = sConn.begin(ReadWrite.WRITE) ;
+ load("D1.ttl", dsg) ; // Loads 1 triples
+
+ query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsg) ;
+ query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead) ;
+
- // Either:
- // Cheap: lock on begin/READ.
- //
dsg.commit() ;
- dsg.close() ; // Hmm
-// dsg = sConn.begin(ReadWrite.READ) ;
-// query("DSG1", "SELECT (count(*) AS ?C) { ?s ?p ?o }", dsg) ;
-// dsg.close() ;
+ dsg.close() ;
- dsgRead.close() ; // Transaction can now write changes to the real DB.
+ DatasetGraphTxn dsgRead2 = sConn.begin(ReadWrite.READ) ;
+ query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead2) ;
+ dsgRead2.close() ;
+
+ dsgRead.close() ; // Transaction can now write changes to the real DB.
+
+ // ILLEGAL!!!!
+ // query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead) ;
+
+ DatasetGraphTxn dsgRead3 = sConn.begin(ReadWrite.READ) ;
+ query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead3) ;
- query("DSG-R", "SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead) ;
exit(0) ;
}
@@ -99,71 +103,6 @@ public class TxMain
model.write(System.out, lang) ;
}
- private static void execNT()
- {
- String dir = "DB" ;
- FileOps.clearDirectory(dir) ;
-
- DatasetGraphTDB dsg = TDBFactory.createDatasetGraph(dir) ;
-
-// BPlusTree index = BPlusTree.makeMem(20, 20, SystemTDB.LenNodeHash, SystemTDB.SizeOfNodeId) ;
- RecordFactory recordFactory = new RecordFactory(SystemTDB.LenNodeHash, SystemTDB.SizeOfNodeId) ;
-// Index idx = index ;
- Index idx = new IndexMap(recordFactory) ;
-
- //ObjectFile objectFile = FileFactory.createObjectFileMem() ;
- ObjectFile objectFile = FileFactory.createObjectFileDisk("DB/N.jrnl") ;
- NodeTable nt0 = dsg.getTripleTable().getNodeTupleTable().getNodeTable() ;
-
- // Add to the base table.
- Node node1 = NodeFactory.parseNode("<x>") ;
- NodeId id_1 = nt0.getAllocateNodeId(node1) ;
-
- // Set up the trans table.
- NodeTableTrans ntt = new NodeTableTrans(nt0, idx, objectFile) ;
- NodeTable nt = NodeTableInline.create(ntt) ;
-
- ntt.begin(null) ;
-
- Node node2 = NodeFactory.parseNode("<y>") ;
- NodeId id_2 = nt.getAllocateNodeId(node2) ;
- System.out.println("==> "+id_2) ;
-
- Node node3 = NodeFactory.parseNode("123") ;
-// n = nt.getNodeForNodeId(id_2) ;
-// System.out.println("2: ==> "+n) ;
- NodeId id_3 = nt.getAllocateNodeId(node3) ;
- System.out.println("==> "+id_3) ;
-
- Node n = nt.getNodeForNodeId(id_1) ;
- System.out.println("1: ==> "+n) ;
- n = nt.getNodeForNodeId(id_2) ;
- System.out.println("2: ==> "+n) ;
- n = nt.getNodeForNodeId(id_3) ;
- System.out.println("3: ==> "+n) ;
-
- NodeId x = nt.getNodeIdForNode(node2) ;
- System.out.println("==> "+x) ;
-
- System.out.println("---- Txn") ;
- System.out.println("Base: "+nt0.getNodeIdForNode(node1)) ;
- System.out.println("Trans: "+nt.getNodeIdForNode(node1)) ;
- System.out.println("Base: "+nt0.getNodeIdForNode(node2)) ;
- System.out.println("Trans: "+nt.getNodeIdForNode(node2)) ;
- System.out.println("Base: "+nt0.getNodeIdForNode(node3)) ;
- System.out.println("Trans: "+nt.getNodeIdForNode(node3)) ;
-
- ntt.commit(null) ;
-
- System.out.println("---- Commit") ;
- System.out.println("Base: "+nt0.getNodeIdForNode(node1)) ;
- System.out.println("Trans: "+nt.getNodeIdForNode(node1)) ;
- System.out.println("Base: "+nt0.getNodeIdForNode(node2)) ;
- System.out.println("Trans: "+nt.getNodeIdForNode(node2)) ;
- System.out.println("Base: "+nt0.getNodeIdForNode(node3)) ;
- System.out.println("Trans: "+nt.getNodeIdForNode(node3)) ;
- }
-
private static void initFS()
{
FileOps.ensureDir(DBdir) ;
@@ -178,7 +117,13 @@ public class TxMain
return dsg ;
}
- public static void query(String label, String queryStr, DatasetGraph dsg)
+ public static void query(String queryStr, DatasetGraphTxn dsg)
+ {
+ String x = "Query ("+dsg.getTransaction().getLabel()+")" ;
+ query(x, queryStr, dsg) ;
+ }
+
+ public static void query(String label, String queryStr, DatasetGraphTxn dsg)
{
System.out.print("**** ") ;
System.out.println(label) ;
@@ -187,8 +132,16 @@ public class TxMain
QueryExecUtils.executeQuery(query, qExec) ;
}
- private static void load(String file, DatasetGraph dsg)
+ private static void load(String file, DatasetGraphTxn dsg)
+ {
+ String x = "Load ("+dsg.getTransaction().getLabel()+")" ;
+ load(x, file, dsg) ;
+ }
+
+ private static void load(String label, String file, DatasetGraph dsg)
{
+ System.out.print("**** ") ;
+ System.out.println(label) ;
System.out.println("Load: "+file) ;
Model m = ModelFactory.createModelForGraph(dsg.getDefaultGraph()) ;
FileManager.get().readModel(m, file) ;
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/StoreConnection.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/StoreConnection.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/StoreConnection.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/StoreConnection.java Wed Jul 13 13:31:46 2011
@@ -28,23 +28,31 @@ import com.hp.hpl.jena.tdb.sys.TDBMaker
import com.hp.hpl.jena.tdb.transaction.JournalControl ;
import com.hp.hpl.jena.tdb.transaction.TransactionManager ;
-/** Interface to the TDB transaction mechanism */
+/** Interface to the TDB transaction mechanism. */
public class StoreConnection
{
- private TransactionManager transactionManager = new TransactionManager() ;
+ // Contains the cache.
+ // Most of the work is done in the TransactionManager
- private DatasetGraphTDB baseDSG ;
+ private final TransactionManager transactionManager ;
+ private final DatasetGraphTDB baseDSG ;
private StoreConnection(Location location)
{
baseDSG = DatasetBuilderStd.build(location.getDirectoryPath()) ;
+ transactionManager = new TransactionManager(baseDSG) ;
}
public Location getLocation() { return baseDSG.getLocation() ; }
public DatasetGraphTxn begin(ReadWrite mode)
{
- return transactionManager.begin(baseDSG, mode) ;
+ return transactionManager.begin(mode) ;
+ }
+
+ public DatasetGraphTxn begin(ReadWrite mode, String label)
+ {
+ return transactionManager.begin(mode, label) ;
}
// ---- statics managing the cache.
@@ -68,8 +76,5 @@ public class StoreConnection
}
return sConn ;
}
-
-
-
}
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/recordbuffer/RecordRangeIterator.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/recordbuffer/RecordRangeIterator.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/recordbuffer/RecordRangeIterator.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/recordbuffer/RecordRangeIterator.java Wed Jul 13 13:31:46 2011
@@ -125,7 +125,10 @@ class RecordRangeIterator implements Ite
}
if ( slot == null )
+ {
+ close() ;
return false ;
+ }
countRecords++ ;
return true ;
}
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetPrefixesTDB.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetPrefixesTDB.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetPrefixesTDB.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetPrefixesTDB.java Wed Jul 13 13:31:46 2011
@@ -129,12 +129,13 @@ public class DatasetPrefixesTDB implemen
Node p = Node.createLiteral(prefix) ;
Iterator<Tuple<Node>> iter = nodeTupleTable.find(g, p, null) ;
- if ( ! iter.hasNext() )
- return null ;
- Tuple<Node> t = iter.next() ;
- Node uri = t.get(2) ;
- Iter.close(iter) ;
- return uri.getURI() ;
+ try {
+ if ( ! iter.hasNext() )
+ return null ;
+ Tuple<Node> t = iter.next() ;
+ Node uri = t.get(2) ;
+ return uri.getURI() ;
+ } finally { Iter.close(iter) ; }
}
@Override
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/DatasetControlMRSW.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/DatasetControlMRSW.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/DatasetControlMRSW.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/DatasetControlMRSW.java Wed Jul 13 13:31:46 2011
@@ -13,6 +13,9 @@ import java.util.Iterator ;
import java.util.NoSuchElementException ;
import java.util.concurrent.atomic.AtomicLong ;
+import org.openjena.atlas.iterator.Iter ;
+import org.openjena.atlas.lib.Closeable ;
+
/** A policy that checks, but does not enforce, single writer or multiple writer locking policy */
public class DatasetControlMRSW implements DatasetControl
{
@@ -69,7 +72,7 @@ public class DatasetControlMRSW implemen
@Override
public <T> Iterator<T> iteratorControl(Iterator<T> iter) { return new IteratorCheckNotConcurrent<T>(iter, epoch) ; }
- private static class IteratorCheckNotConcurrent<T> implements Iterator<T>
+ private static class IteratorCheckNotConcurrent<T> implements Iterator<T>, Closeable
{
private Iterator<T> iter ;
private AtomicLong eCount ;
@@ -103,7 +106,7 @@ public class DatasetControlMRSW implemen
checkCourrentModification() ;
boolean b = iter.hasNext() ;
if ( ! b )
- finished = true ;
+ close() ;
return b ;
}
@@ -112,8 +115,8 @@ public class DatasetControlMRSW implemen
{
checkCourrentModification() ;
try {
- return iter.next();
- } catch (NoSuchElementException ex) { finished = true ; throw ex ; }
+ return iter.next();
+ } catch (NoSuchElementException ex) { close() ; throw ex ; }
}
@Override
@@ -122,6 +125,13 @@ public class DatasetControlMRSW implemen
checkCourrentModification() ;
iter.remove() ;
}
+
+ @Override
+ public void close()
+ {
+ finished = true ;
+ Iter.close(iter) ;
+ }
}
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/BlockMgrJournal.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/BlockMgrJournal.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/BlockMgrJournal.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/BlockMgrJournal.java Wed Jul 13 13:31:46 2011
@@ -48,17 +48,36 @@ public class BlockMgrJournal implements
reset(txn, fileRef, blockMgr, journal) ;
}
+
+// public void begin(Transaction txn) ;
+// public void abort(Transaction txn) ;
+// public void commitPrepare(Transaction txn) ;
+// public void commitEnact(Transaction txn) ;
+// public void clearup(Transaction txn) ;
+
@Override
- public void commit(Transaction txn)
+ public void commitPrepare(Transaction txn)
{
- //log.info("Commit {} {}", fileRef.getFilename(), writeBlocks.size()) ;
for ( Block blk : writeBlocks.values() )
writeJournalEntry(blk) ;
}
@Override
+ public void commitEnact(Transaction txn)
+ {
+ // No-op : this is done by playing the master journal.
+ }
+
+ @Override
public void abort(Transaction txn)
{
+ // Do clearup of in-memory structures in clearup().
+ }
+
+ @Override
+ public void clearup(Transaction txn)
+ {
+ // Persistent state is in the system journal.
reset(txn) ;
}
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetBuilderTxn.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetBuilderTxn.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetBuilderTxn.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetBuilderTxn.java Wed Jul 13 13:31:46 2011
@@ -36,11 +36,13 @@ import com.hp.hpl.jena.tdb.sys.SystemTDB
public class DatasetBuilderTxn
{
+ // Context for the build.
private TransactionManager txnMgr ;
- Map<FileRef, BlockMgr> blockMgrs ;
- Map<FileRef, NodeTable> nodeTables ;
- Journal journal ;
- Transaction txn ;
+ private Map<FileRef, BlockMgr> blockMgrs ;
+ private Map<FileRef, NodeTable> nodeTables ;
+ private Journal journal ;
+ private Transaction txn ;
+ private DatasetGraphTDB dsg ;
public DatasetBuilderTxn(TransactionManager txnMgr) { this.txnMgr = txnMgr ; }
@@ -49,16 +51,17 @@ public class DatasetBuilderTxn
this.blockMgrs = dsg.getConfig().blockMgrs ;
this.nodeTables = dsg.getConfig().nodeTables ;
this.txn = transaction ;
+ this.dsg = dsg ;
switch(mode)
{
- case READ : return buildReadonly(transaction, dsg) ;
- case WRITE : return buildWritable(transaction, dsg) ;
+ case READ : return buildReadonly() ;
+ case WRITE : return buildWritable() ;
default: return null ; // Silly Java.
}
}
- private DatasetGraphTxn buildReadonly(Transaction transaction, DatasetGraphTDB dsg)
+ private DatasetGraphTxn buildReadonly()
{
BlockMgrBuilder blockMgrBuilder = new BlockMgrBuilderReadonly() ;
NodeTableBuilder nodeTableBuilder = new NodeTableBuilderReadonly() ;
@@ -67,7 +70,7 @@ public class DatasetBuilderTxn
return new DatasetGraphTxn(dsg2, txn) ;
}
- private DatasetGraphTDB buildWritable(Transaction transaction, DatasetGraphTDB dsg)
+ private DatasetGraphTDB buildWritable()
{
BufferChannel chan ;
if ( dsg.getLocation().isMem() )
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java Wed Jul 13 13:31:46 2011
@@ -150,30 +150,43 @@ public class NodeTableTrans implements N
}
@Override
- public void commit(Transaction txn)
+ public void commitPrepare(Transaction txn)
{
if ( ! inTransaction )
- throw new TDBTransactionException("Not in a transaction for a commit to happen") ;
+ throw new TDBTransactionException("Not in a transaction for a commit to happen") ;
+ journal.sync() ;
+ }
+
+ @Override
+ public void commitEnact(Transaction txn)
+ {
append() ;
- base.sync() ; // NodeTables shoudl do an actual sync only if they have changed.
- clearUp() ;
+ base.sync() ; // NodeTables should do an actual sync only if they have changed.
+ journal.reposition(0) ;
}
@Override
public void abort(Transaction txn)
{
- clearUp() ;
+ journal.reposition(0) ;
}
- private void clearUp()
+ @Override
+ public void clearup(Transaction txn)
{
+ journal.truncate(0);
passthrough = true ;
- //nodeIndex ;
- journal.truncate(0) ;
- journal.close() ;
- nodeTableJournal = null ;
}
-
+
+// private void clearUp()
+// {
+// passthrough = true ;
+// //nodeIndex ;
+// journal.truncate(0) ;
+// journal.close() ;
+// nodeTableJournal = null ;
+// }
+//
@Override
public Iterator<Pair<NodeId, Node>> all()
{
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/ObjectFileTrans.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/ObjectFileTrans.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/ObjectFileTrans.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/ObjectFileTrans.java Wed Jul 13 13:31:46 2011
@@ -52,14 +52,21 @@ public class ObjectFileTrans implements
}
@Override
- public void commit(Transaction txn)
+ public void commitPrepare(Transaction txn)
+ {
+ if ( ! inTransaction )
+ throw new TDBTransactionException("Not in a transaction for a commit to happen") ;
+ other.sync() ;
+ }
+
+ @Override
+ public void commitEnact(Transaction txn)
{
if ( ! inTransaction )
throw new TDBTransactionException("Not in a transaction for a commit to happen") ;
append() ;
base.sync() ;
other.reposition(0) ;
- passthrough = true ;
}
@Override
@@ -68,6 +75,13 @@ public class ObjectFileTrans implements
other.reposition(0) ;
}
+ @Override
+ public void clearup(Transaction txn)
+ {
+ other.truncate(0) ;
+ passthrough = true ;
+ }
+
/** Copy from the temporary file to the real file */
public /*temporary*/ void append()
{
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java Wed Jul 13 13:31:46 2011
@@ -11,17 +11,18 @@ import java.util.Collections ;
import java.util.Iterator ;
import java.util.List ;
-
+import com.hp.hpl.jena.tdb.DatasetGraphTxn ;
import com.hp.hpl.jena.tdb.ReadWrite ;
import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
import com.hp.hpl.jena.tdb.sys.FileRef ;
import com.hp.hpl.jena.tdb.sys.SystemTDB ;
-/** A transaction handle */
+/** A transaction. Much of the work is done in the transaction manager */
public class Transaction
{
// TODO split internal and external features.
private final long id ;
+ private final String label ;
private final TransactionManager txnMgr ;
private final List<Iterator<?>> iterators ;
private Journal journal = null ;
@@ -30,14 +31,23 @@ public class Transaction
private final List<NodeTableTrans> nodeTableTrans = new ArrayList<NodeTableTrans>() ;
private final List<BlockMgrJournal> blkMgrs = new ArrayList<BlockMgrJournal>() ;
- private DatasetGraphTDB basedsg ;
+ // The dataset this is a transaction over - may be a commited, pending dataset.
+ private DatasetGraphTDB basedsg ;
+ private DatasetGraphTxn activedsg ;
- public Transaction(DatasetGraphTDB basedsg, ReadWrite mode, long id, TransactionManager txnMgr)
+
+
+ public Transaction(DatasetGraphTDB dsg, ReadWrite mode, long id, String label, TransactionManager txnMgr)
{
this.id = id ;
+ if (label == null )
+ label = "Txn" ;
+ label = label+"["+id+"]" ;
+ this.label = label ;
this.txnMgr = txnMgr ;
- this.basedsg = basedsg ;
+ this.basedsg = dsg ;
this.mode = mode ;
+ activedsg = null ; // Don't know yet.
this.iterators = new ArrayList<Iterator<?>>() ;
state = TxnState.ACTIVE ;
}
@@ -45,13 +55,13 @@ public class Transaction
synchronized
public void commit()
{
+ // Do prepare, write the COMMIT record.
+ // Enacting is left to the TransactionManager.
if ( mode == ReadWrite.WRITE )
{
if ( state != TxnState.ACTIVE )
throw new TDBTransactionException("Transaction has already committed or aborted") ;
- prepare() ;
-
JournalEntry entry = new JournalEntry(JournalEntryType.Commit, FileRef.Journal, null) ;
journal.writeJournal(entry) ;
journal.sync() ; // Commit point.
@@ -71,9 +81,9 @@ public class Transaction
state = TxnState.PREPARING ;
for ( BlockMgrJournal x : blkMgrs )
- x.commit(this) ;
+ x.commitPrepare(this) ;
for ( NodeTableTrans x : nodeTableTrans )
- x.commit(this) ;
+ x.commitPrepare(this) ;
}
/** For testing - do things but do not write the commit record */
@@ -94,14 +104,14 @@ public class Transaction
if ( state != TxnState.ACTIVE )
throw new TDBTransactionException("Transaction has already committed or aborted") ;
- journal.truncate(0) ;
-
// Clearup.
for ( BlockMgrJournal x : blkMgrs )
x.abort(this) ;
for ( NodeTableTrans x : nodeTableTrans )
x.abort(this) ;
+ journal.truncate(0) ;
+
state = TxnState.ABORTED ;
txnMgr.notifyAbort(this) ;
}
@@ -120,7 +130,7 @@ public class Transaction
commit() ;
else
{
- SystemTDB.errlog.warn("Transaction not commited or aborted") ;
+ SystemTDB.errlog.warn("Transaction not commited or aborted: "+this) ;
abort() ;
}
break ;
@@ -129,13 +139,43 @@ public class Transaction
state = TxnState.CLOSED ;
txnMgr.notifyClose(this) ;
+
+ // Imperfect : too many higher level iterators build on unclosables
+ // (e.g. anoniterators in Iter)
+ // so close does not get passed to the base.
+// for ( Iterator<?> iter : iterators )
+// Log.info(this, "Active iterator: "+iter) ;
+
+ // Clear per-transaction temnporary state.
+ iterators.clear() ;
}
public ReadWrite getMode() { return mode ; }
public TxnState getState() { return state ; }
+
+ List<NodeTableTrans> getNodeTableTrans()
+ {
+ return nodeTableTrans ;
+ }
+
+ List<BlockMgrJournal> getBlkMgrs()
+ {
+ return blkMgrs ;
+ }
+
public long getTxnId() { return id ; }
- public TransactionManager getTxnMgr() { return txnMgr ; }
+ TransactionManager getTxnMgr() { return txnMgr ; }
+ public DatasetGraphTxn getActiveDataset()
+ {
+ return activedsg ;
+ }
+
+ public void setActiveDataset(DatasetGraphTxn activedsg)
+ {
+ this.activedsg = activedsg ;
+ }
+
public void addIterator(Iterator<?> iter) { iterators.add(iter) ; }
public void removeIterator(Iterator<?> iter) { iterators.remove(iter) ; }
public List<Iterator<?>> iterators() { return Collections.unmodifiableList(iterators) ; }
@@ -176,6 +216,11 @@ public class Transaction
{
return "Transaction: "+id+" : Mode="+mode+" : State="+state+" : "+basedsg.getLocation().getDirectoryPath() ;
}
+
+ public String getLabel()
+ {
+ return label ;
+ }
}
/*
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java Wed Jul 13 13:31:46 2011
@@ -20,16 +20,15 @@ import java.util.concurrent.LinkedBlocki
import org.openjena.atlas.logging.Log ;
import org.slf4j.Logger ;
-import com.hp.hpl.jena.sparql.core.DatasetGraph ;
import com.hp.hpl.jena.tdb.DatasetGraphTxn ;
import com.hp.hpl.jena.tdb.ReadWrite ;
-import com.hp.hpl.jena.tdb.TDBException ;
import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
import com.hp.hpl.jena.tdb.sys.SystemTDB ;
public class TransactionManager
{
// TODO Don't keep counter, keep lists.
+ // TODO Useful logging.
private static Logger log = SystemTDB.syslog ;
@@ -37,20 +36,31 @@ public class TransactionManager
// Transactions that have commit (and the journal is written) but haven't
// writted back to the main database.
+
private List<Transaction> commitedAwaitingFlush = new ArrayList<Transaction>() ;
+
static long transactionId = 1 ;
private int readers = 0 ;
- private int writers = 0 ; // 0 or 1
- private int committed = 0 ;
+ private int writers = 0 ; // 0 or 1
+
+ // Misc stats
+ private int finishedReads = 0 ;
+ private int committedWrite = 0 ;
+ private int abortedWrite = 0 ;
private BlockingQueue<Transaction> queue = new LinkedBlockingDeque<Transaction>() ;
private Thread committerThread ;
+
+ private DatasetGraphTDB baseDataset ;
- public TransactionManager()
- {
+ public TransactionManager(DatasetGraphTDB dsg)
+ {
+// if ( ! ( dsg instanceof DatasetGraphTDB ) )
+// throw new TDBException("Not a TDB-backed dataset") ;
+ this.baseDataset = dsg ;
// LATER
// Committer c = new Committer() ;
// this.committerThread = new Thread(c) ;
@@ -58,31 +68,28 @@ public class TransactionManager
// committerThread.start() ;
}
- private Transaction createTransaction(DatasetGraphTDB dsg, ReadWrite mode)
+ private Transaction createTransaction(DatasetGraphTDB dsg, ReadWrite mode, String label)
{
- Transaction txn = new Transaction(dsg, mode, transactionId++, this) ;
+ Transaction txn = new Transaction(dsg, mode, transactionId++, label, this) ;
return txn ;
}
+
+ public DatasetGraphTxn begin(ReadWrite mode)
+ {
+ return begin(mode, null) ;
+ }
synchronized
- public DatasetGraphTxn begin(DatasetGraph dsg, ReadWrite mode)
+ public DatasetGraphTxn begin(ReadWrite mode, String label)
{
- if ( log.isDebugEnabled() )
- log.debug(format("begin: R={} / W={} / #={}", readers, writers,activeTransactions.size())) ;
-
- // If already a transaction ...
- // Subs transactions are a new view - commit is only commit to parent transaction.
- if ( dsg instanceof DatasetGraphTxn )
- {
- throw new TDBException("Already in transactional DatasetGraph") ;
- // Either:
- // error -> implies nested
- // create new transaction
- }
-
- if ( ! ( dsg instanceof DatasetGraphTDB ) )
- throw new TDBException("Not a TDB-backed dataset") ;
-
+// // Subs transactions are a new view - commit is only commit to parent transaction.
+// if ( dsg instanceof DatasetGraphTxn )
+// {
+// throw new TDBException("Already in transactional DatasetGraph") ;
+// // Either:
+// // error -> implies nested
+// // create new transaction
+// }
switch (mode)
{
case READ : readers++ ; break ;
@@ -93,15 +100,18 @@ public class TransactionManager
break ;
}
- DatasetGraphTDB dsgtdb = (DatasetGraphTDB)dsg ;
- // THIS IS NECESSARY BECAUSE THE DATASET MAY HAVE BEEN UPDATED AND CHANGES STILL IN CACHES.
- // MUST WRITE OUT - BUT ALSO REUSE CACHES.
- dsgtdb.sync() ;
+ DatasetGraphTDB dsg = baseDataset ;
+ // *** But, if there are pending, committed transactions, use one.
+ if ( ! commitedAwaitingFlush.isEmpty() )
+ dsg = commitedAwaitingFlush.get(commitedAwaitingFlush.size()-1).getActiveDataset() ;
- Transaction txn = createTransaction(dsgtdb, mode) ;
- DatasetGraphTxn dsgTxn = (DatasetGraphTxn)new DatasetBuilderTxn(this).build(txn, mode, dsgtdb) ;
+ Transaction txn = createTransaction(dsg, mode, label) ;
+ DatasetGraphTxn dsgTxn = (DatasetGraphTxn)new DatasetBuilderTxn(this).build(txn, mode, dsg) ;
+ txn.setActiveDataset(dsgTxn) ;
Iterator<Transactional> iter = dsgTxn.getTransaction().components() ;
+
+ // Notify everyone we're starting.
for ( ; iter.hasNext() ; )
iter.next().begin(dsgTxn.getTransaction()) ;
@@ -117,8 +127,11 @@ public class TransactionManager
if ( log.isDebugEnabled() )
log.debug("commit: "+transaction) ;
+ // Transaction has done the commitPrepare - can we enact it?
+
if ( ! activeTransactions.contains(transaction) )
SystemTDB.errlog.warn("Transaction not active: "+transaction.getTxnId()) ;
+
endTransaction(transaction) ;
if ( readers == 0 && transaction.getMode() == ReadWrite.WRITE )
@@ -133,11 +146,32 @@ public class TransactionManager
}
}
+ private void commitTransaction(Transaction transaction)
+ {
+ // Really, really do it!
+ for ( BlockMgrJournal x : transaction.getBlkMgrs() )
+ {
+ x.commitEnact(transaction) ;
+ x.clearup(transaction) ;
+ }
+
+ for ( NodeTableTrans x : transaction.getNodeTableTrans() )
+ {
+ x.commitEnact(transaction) ;
+ x.clearup(transaction) ;
+ }
+
+ // This cleans up as well.
+ JournalControl.replay(transaction.getJournal(), transaction.getBaseDataset()) ;
+ }
+
synchronized
public void notifyAbort(Transaction transaction)
{
+ // Transaction has done the abort on all the transactional elements.
+ // TODO Suppose the system journal has
if ( log.isDebugEnabled() )
- log.info("notifyAbort: "+transaction) ;
+ log.info("abort: "+transaction) ;
if ( ! activeTransactions.contains(transaction) )
SystemTDB.errlog.warn("Transaction not active: "+transaction.getTxnId()) ;
endTransaction(transaction) ;
@@ -156,6 +190,7 @@ public class TransactionManager
txn.abort() ;
}
+ // Process any pending commits held up due to a reader.
if ( readers == 0 && writers == 0 )
{
// Given this is sync'ed to the TransactionManager,
@@ -185,18 +220,12 @@ public class TransactionManager
private void endTransaction(Transaction transaction)
{
- if ( log.isDebugEnabled() )
- log.debug("endTransaction: "+transaction) ;
-
if ( transaction.getMode() == READ )
readers-- ;
else
writers-- ;
activeTransactions.remove(transaction) ;
- if ( log.isDebugEnabled() )
- log.debug(format("endTransaction: R=%d / W=%d / #=%d\n", readers, writers,activeTransactions.size())) ;
-
}
// LATER.
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transactional.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transactional.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transactional.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transactional.java Wed Jul 13 13:31:46 2011
@@ -11,11 +11,24 @@ package com.hp.hpl.jena.tdb.transaction;
*/
public interface Transactional
{
- // version 1
+ // begin - commitPrepare - commitEnact - clearup
+ // begin - abort - clearup
+ // May be reused via a new call to begin - see impl for if that's possible.
+
+ /** Start an update transaction */
public void begin(Transaction txn) ;
- public void commit(Transaction txn) ;
- //public boolean postCommit(Transaction txn) ;
+
+ /** End of active phase - will not be making these changes*/
public void abort(Transaction txn) ;
+
+ /** End of active phase. Make changes safe; do not update the base data. */
+ public void commitPrepare(Transaction txn) ;
+
+ /** Update the base data */
+ public void commitEnact(Transaction txn) ;
+
+ /** All done - transaction committed and incorporated in the base dataset */
+ public void clearup(Transaction txn) ;
}
/*
Modified: incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/AbstractTestNodeTableTrans.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/AbstractTestNodeTableTrans.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/AbstractTestNodeTableTrans.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/AbstractTestNodeTableTrans.java Wed Jul 13 13:31:46 2011
@@ -44,10 +44,15 @@ public abstract class AbstractTestNodeTa
}
}
+ Transaction createTxn(long id)
+ {
+ return new Transaction(null, null, id, null, null) ;
+ }
+
@Test public void nodetrans_01()
{
NodeTableTrans ntt = create() ;
- Transaction txn = new Transaction(null, null, 11, null) ;
+ Transaction txn = createTxn(11) ;
ntt.begin(txn) ;
ntt.abort(txn) ;
}
@@ -58,7 +63,7 @@ public abstract class AbstractTestNodeTa
NodeTableTrans ntt = create() ;
NodeTable nt0 = ntt.getBaseNodeTable() ;
- Transaction txn = new Transaction(null, null, 11, null) ;
+ Transaction txn = createTxn(11) ;
ntt.begin(txn) ;
// Add a node
NodeId nodeId = ntt.getAllocateNodeId(node1) ;
@@ -68,10 +73,12 @@ public abstract class AbstractTestNodeTa
assertEquals(NodeId.NodeDoesNotExist, nt0.getNodeIdForNode(node1)) ;
assertEquals(node1, ntt.getNodeForNodeId(nodeId)) ;
- ntt.commit(txn) ;
+ ntt.commitPrepare(txn) ;
+ ntt.commitEnact(txn) ;
// Check it is now in the base.
assertEquals(node1, nt0.getNodeForNodeId(nodeId)) ;
assertEquals(nodeId, nt0.getNodeIdForNode(node1)) ;
+ ntt.clearup(txn) ;
}
@Test public void nodetrans_03()
@@ -79,7 +86,7 @@ public abstract class AbstractTestNodeTa
NodeTableTrans ntt = create() ;
NodeTable nt0 = ntt.getBaseNodeTable() ;
- Transaction txn = new Transaction(null, null, 11, null) ;
+ Transaction txn = createTxn(11) ;
ntt.begin(txn) ;
// Add a node
NodeId nodeId = ntt.getAllocateNodeId(node1) ;
@@ -93,13 +100,14 @@ public abstract class AbstractTestNodeTa
// Check it is not in the base.
assertEquals(NodeId.NodeDoesNotExist, nt0.getNodeIdForNode(node1)) ;
assertNull(nt0.getNodeForNodeId(nodeId)) ;
+ ntt.clearup(txn) ;
}
@Test public void nodetrans_04()
{
NodeTableTrans ntt = create(node1) ;
NodeTable nt0 = ntt.getBaseNodeTable() ;
- Transaction txn = new Transaction(null, null, 11, null) ;
+ Transaction txn = createTxn(11) ;
ntt.begin(txn) ;
// Add a node
NodeId nodeId = ntt.getAllocateNodeId(node2) ;
@@ -107,8 +115,10 @@ public abstract class AbstractTestNodeTa
assertEquals(NodeId.NodeDoesNotExist, nt0.getNodeIdForNode(node2)) ;
// Is here
assertEquals(nodeId, ntt.getNodeIdForNode(node2)) ;
- ntt.commit(txn) ;
+ ntt.commitPrepare(txn) ;
+ ntt.commitEnact(txn) ;
assertEquals(nodeId, nt0.getNodeIdForNode(node2)) ;
+ ntt.clearup(txn) ;
}
}
Modified: incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/AbstractTestObjectFileTrans.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/AbstractTestObjectFileTrans.java?rev=1146007&r1=1146006&r2=1146007&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/AbstractTestObjectFileTrans.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/AbstractTestObjectFileTrans.java Wed Jul 13 13:31:46 2011
@@ -34,7 +34,7 @@ public abstract class AbstractTestObject
@Before
public void setup()
{
- txn = new Transaction(null, null, ++count, null) ;
+ txn = new Transaction(null, null, ++count, null, null) ;
file1 = createFile("base") ;
file2 = createFile("log") ;
}
@@ -89,8 +89,10 @@ public abstract class AbstractTestObject
file.begin(txn) ;
contains(file2) ;
- file.commit(txn) ;
+ file.commitPrepare(txn) ;
+ file.commitEnact(txn) ;
contains(file1, "ABC") ;
+ file.clearup(txn) ;
}
@Test public void objFileTrans_03()
@@ -99,8 +101,10 @@ public abstract class AbstractTestObject
init() ;
file.begin(txn) ;
write(file, "X") ;
- file.commit(txn) ;
+ file.commitPrepare(txn) ;
+ file.commitEnact(txn) ;
contains(file1, "ABC", "X") ;
+ file.clearup(txn) ;
}
@Test public void objFileTrans_04()
@@ -109,8 +113,10 @@ public abstract class AbstractTestObject
init() ;
file.begin(txn) ;
write(file, "ABCDEFGHIJKLMNOPQRSTUVWXYZ") ;
- file.commit(txn) ;
+ file.commitPrepare(txn) ;
+ file.commitEnact(txn) ;
contains(file1, "ABC", "ABC", "ABCDEFGHIJKLMNOPQRSTUVWXYZ") ;
+ file.clearup(txn) ;
}
@Test public void objFileTrans_05()
@@ -121,6 +127,7 @@ public abstract class AbstractTestObject
write(file, "ABCDEF") ;
file.abort(txn) ;
contains(file1, "ABC") ;
+ file.clearup(txn) ;
}
@Test public void objFileTrans_06()