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/07 17:26:17 UTC

svn commit: r1143883 - in /incubator/jena/Experimental/TxTDB/trunk: src-dev/tx/ src/main/java/com/hp/hpl/jena/tdb/base/file/ src/main/java/com/hp/hpl/jena/tdb/nodetable/ src/main/java/com/hp/hpl/jena/tdb/store/ src/main/java/com/hp/hpl/jena/tdb/sys/ sr...

Author: andy
Date: Thu Jul  7 15:26:17 2011
New Revision: 1143883

URL: http://svn.apache.org/viewvc?rev=1143883&view=rev
Log: (empty)

Added:
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TableBase.java   (with props)
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/base/file/Location.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTable.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableView.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableWrapper.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.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/store/QuadTable.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TripleTable.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/CachingTDBMaker.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/Names.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/Journal.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/Transaction.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.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=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java Thu Jul  7 15:26:17 2011
@@ -2,11 +2,9 @@ package tx;
 
 public class DevTx
 {
-    // Does not work for memory datasets. (in-memory journal, then opened on disk?)
-    // Moding in Journal - startReply-endReplay. 
-    
-    // DatasetGraphTDB : read-only mode (when transaction active)
-    //   Prefixes as well.
+    // NodeTable journalling and recovery
+    //   Currently, NT wriiten in commit phase, before the journal commit entry.
+    //   Safe
     
     // DSG.add(Quad(tripleInQuad, triple)) does not affect default graph.
     

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=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java Thu Jul  7 15:26:17 2011
@@ -25,6 +25,8 @@ import com.hp.hpl.jena.sparql.util.NodeF
 import com.hp.hpl.jena.sparql.util.QueryExecUtils ;
 import com.hp.hpl.jena.tdb.TDBFactory ;
 import com.hp.hpl.jena.tdb.base.block.FileMode ;
+import com.hp.hpl.jena.tdb.base.file.BufferChannel ;
+import com.hp.hpl.jena.tdb.base.file.BufferChannelFile ;
 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 ;
@@ -36,6 +38,7 @@ import com.hp.hpl.jena.tdb.nodetable.Nod
 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.Names ;
 import com.hp.hpl.jena.tdb.sys.SystemTDB ;
 import com.hp.hpl.jena.tdb.transaction.DatasetGraphTxnTDB ;
 import com.hp.hpl.jena.tdb.transaction.Journal ;
@@ -73,21 +76,35 @@ public class TxMain
         
         //SystemTDB.setFileMode(FileMode.direct) ;
         SystemTDB.setFileMode(FileMode.mapped) ;
+        DatasetGraphTDB dsg0 = build() ;
         
-        initFS() ;
-        
-//        RangeIndex rIdx = SetupTDB.createBPTree(new FileSet("DB/tree"), new RecordFactory(24, 0)) ;
-//        
-//        for ( Record r : rIdx )
-//        {
-//            System.out.println(r) ;
-//        }
-//        exit(0) ;
-        
+        //initFS() ;
+        // replay!
+        String journalFilename = dsg0.getLocation().absolute(Names.journalFile) ;
+        if ( FileOps.exists(journalFilename))
+        {
+            
+            BufferChannel bc = new BufferChannelFile(journalFilename) ;
+            if ( bc.size() != 0 )
+            {
+                System.out.println("Recovery !") ;
+                query("Before", "SELECT (Count(*) AS ?c1) { ?s ?p ?o }", dsg0) ;
+                Journal j0 = new Journal(bc) ;
+                
+                // NOTE
+                // The NodeTable Journal has already been done!
+                
+                Replay.replay(j0, dsg0) ;
+                System.out.println("after") ;
+                query("After", "SELECT (Count(*) AS ?c1) { ?s ?p ?o }", dsg0) ;
+                bc.close() ;
+                FileOps.delete(journalFilename) ;
+                
+            }
+        }
         
-        DatasetGraphTDB dsg0 = build() ;
         dsg0.sync() ;
-        query("SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
+        query("Initial state", "SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
         //exit(0) ;
         
         TransactionManager txnMgr = new TransactionManager() ;
@@ -95,12 +112,15 @@ public class TxMain
         DatasetGraphTxnTDB dsg1 = txnMgr.begin(dsg0) ;
         
         load("D.ttl", dsg1) ;
-        query("SELECT (Count(*) AS ?c1) { ?s ?p ?o }", dsg1) ;
-        query("SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
+        query("dsg1", "SELECT (Count(*) AS ?c1) { ?s ?p ?o }", dsg1) ;
+        query("dsg0", "SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
+        
         
         dsg1.commit() ;
         
-        System.out.println("Replay") ;
+//        dsg1.abort() ;
+        
+        //System.out.println("Replay") ;
         
         
         // Better journal control
@@ -110,9 +130,9 @@ public class TxMain
         Journal j = dsg1.getTransaction().getJournal() ;
         
         //Replay.print(j) ;
-        Replay.replay(j, dsg0) ;
-        query("SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
-        query("SELECT * { ?s ?p ?o }", dsg0) ;
+        //Replay.replay(j, dsg0) ;
+        //query("dsg0", "SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
+        query("dsg0", "SELECT * { ?s ?p ?o }", dsg0) ;
         write(dsg0.getDefaultGraph(), "TTL") ;
         
         exit(0) ;
@@ -187,8 +207,6 @@ public class TxMain
         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()
@@ -199,10 +217,10 @@ public class TxMain
     
     private static DatasetGraphTDB build()
     {
-        return DatasetBuilderStd.build() ;
-        
-//        DatasetGraphTDB dsg = TDBFactory.createDatasetGraph(DBdir) ;
-//        return dsg ;
+        //return DatasetBuilderStd.build() ;
+        //DatasetGraphTDB dsg = TDBFactory.createDatasetGraph(DBdir) ;
+        DatasetGraphTDB dsg = DatasetBuilderStd.build(DBdir) ;
+        return dsg ;
     }
 
     private static DatasetGraphTxnTDB buildTx(DatasetGraph dsg)
@@ -211,8 +229,10 @@ public class TxMain
         return dsg2 ;
     }
 
-    public static void query(String queryStr, DatasetGraph dsg)
+    public static void query(String label, String queryStr, DatasetGraph dsg)
     {
+        System.out.print("**** ") ;
+        System.out.println(label) ;
         Query query = QueryFactory.create(queryStr, Syntax.syntaxARQ) ;
         QueryExecution qExec = QueryExecutionFactory.create(query, DatasetFactory.create(dsg)) ;
         QueryExecUtils.executeQuery(query, qExec) ;

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/Location.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/Location.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/Location.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/Location.java Thu Jul  7 15:26:17 2011
@@ -179,6 +179,36 @@ public class Location
     }
     
     @Override
+    public int hashCode()
+    {
+        if ( isMem )
+            return 37 ;
+        final int prime = 31 ;
+        int result = 1 ;
+        result = prime * result + ((pathname == null) ? 0 : pathname.hashCode()) ;
+        return result ;
+    }
+
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (this == obj) return true ;
+        if (obj == null) return false ;
+        if (getClass() != obj.getClass()) return false ;
+        Location other = (Location)obj ;
+        if ( isMem && other.isMem ) return true ;
+        if ( isMem && ! other.isMem ) return false ; 
+        if ( ! isMem && other.isMem ) return false ; 
+        
+        if (pathname == null)
+        {
+            if (other.pathname != null) return false ;
+        } else
+            if (!pathname.equals(other.pathname)) return false ;
+        return true ;
+    }
+
+    @Override
     public String toString() { return "location:"+pathname ; }
 }
 

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTable.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTable.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTable.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTable.java Thu Jul  7 15:26:17 2011
@@ -48,6 +48,10 @@ public interface NodeTupleTable extends 
 
     public boolean isEmpty() ;
     
+    public boolean isReadOnly() ;
+    public void    setReadOnly(boolean mode) ;
+    
+    
     /** Clear the tuple table.  After this operation, find* will find  nothing.
      * This does not mean all data has been removed - for example, it does not mean
      * that any node table has been emptied.

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java Thu Jul  7 15:26:17 2011
@@ -31,6 +31,8 @@ public class NodeTupleTableConcrete impl
     protected final NodeTable  nodeTable ;
     protected final TupleTable tupleTable ;
     private final ConcurrencyPolicy conPolicy ;
+    private boolean readOnly ;
+
     /*
      * Concurrency checking: Everything goes through one of addRow, deleteRow or
      * find*
@@ -41,17 +43,23 @@ public class NodeTupleTableConcrete impl
         if (indexes.length == 0 || indexes[0] == null) throw new TDBException("A primary index is required") ;
         for (TupleIndex index : indexes)
         {
-            if (N != index.getTupleLength()) throw new TDBException(format("Inconsistent: TupleTable width is %d but index %s is %d",
-                                                                           N, index.getLabel(), index.getTupleLength())) ;
+            if (N != index.getTupleLength())
+                throw new TDBException(format("Inconsistent: TupleTable width is %d but index %s is %d",
+                                              N, index.getLabel(), index.getTupleLength())) ;
         }
 
         this.conPolicy = conPolicy ;
         this.tupleTable = new TupleTable(N, indexes) ;
         this.nodeTable = nodeTable ;
+        this.readOnly = false ;
     }
 
     private void startWrite()
-    { conPolicy.startUpdate() ; }
+    {
+        if ( readOnly )
+            throw new TDBException("read only") ;
+        conPolicy.startUpdate() ;
+    }
 
     private void finishWrite()
     { conPolicy.finishUpdate() ; }
@@ -205,6 +213,12 @@ public class NodeTupleTableConcrete impl
     }
 
     @Override
+    public boolean isReadOnly() { return readOnly ; }
+    
+    @Override
+    public void setReadOnly(boolean mode) { readOnly = mode ; }
+    
+    @Override
     public boolean isEmpty()
     {
         return tupleTable.isEmpty() ;

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableView.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableView.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableView.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableView.java Thu Jul  7 15:26:17 2011
@@ -15,13 +15,14 @@ import com.hp.hpl.jena.graph.Node ;
 import com.hp.hpl.jena.tdb.index.TupleTable ;
 import com.hp.hpl.jena.tdb.store.NodeId ;
 
-/** Read-only projection of another NodeTupleTable. 
+/** (Read-only?) projection of another NodeTupleTable. 
  * This will not reduce a N-wide tuple to N-1 when find*() used. 
  */ 
 public class NodeTupleTableView extends NodeTupleTableWrapper
 {
     private Node prefix ;
     private NodeId prefixId ;
+    //private boolean readOnly = false ;
 
     public NodeTupleTableView(NodeTupleTable ntt, Node prefix)
     {
@@ -80,8 +81,11 @@ public class NodeTupleTableView extends 
         return nodeTupleTable.findAsNodeIds(nodes) ;
     }
 
-//    public NodeTable getNodeTable()
-//    { return nodeTupleTable.getNodeTable() ; }
+//    @Override
+//    public boolean isReadOnly() { return readOnly ; }
+//
+//    @Override
+//    public void setReadOnly(boolean mode)   { readOnly = mode ; }
 
     @Override
     public TupleTable getTupleTable()

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableWrapper.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableWrapper.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableWrapper.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableWrapper.java Thu Jul  7 15:26:17 2011
@@ -68,6 +68,14 @@ public class NodeTupleTableWrapper imple
     { return nodeTupleTable.getTupleTable() ; }
 
     @Override
+    public boolean isReadOnly()
+    { return nodeTupleTable.isReadOnly() ; }
+
+    @Override
+    public void setReadOnly(boolean mode)
+    { nodeTupleTable.setReadOnly(mode) ; }
+
+    @Override
     public boolean isEmpty()
     { return nodeTupleTable.isEmpty() ; }
     

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java Thu Jul  7 15:26:17 2011
@@ -44,6 +44,7 @@ public class DatasetGraphTDB extends Dat
     
     private GraphTDB effectiveDefaultGraph ;
     private boolean closed = false ;
+    private boolean readOnly = false ;
 
     public DatasetGraphTDB(TripleTable tripleTable, QuadTable quadTable, DatasetPrefixStorage prefixes, 
                            ReorderTransformation transform, StoreConfig config)
@@ -67,7 +68,16 @@ public class DatasetGraphTDB extends Dat
     }
     
     public QuadTable getQuadTable()         { return quadTable ; }
-    public TripleTable getTripleTable()     { return tripleTable ; } 
+    public TripleTable getTripleTable()     { return tripleTable ; }
+    
+    public boolean isReadOnly()             { return readOnly ; }
+    public void    setReadOnly(boolean mode)
+    {
+        tripleTable.setReadOnly(mode) ;
+        quadTable.setReadOnly(mode) ;
+        
+        ((DatasetPrefixesTDB)prefixes).setReadOnly(mode) ;
+    }
     
 //    private Lock lock = new MRSWLite() ;
 //    @Override 
@@ -220,7 +230,6 @@ public class DatasetGraphTDB extends Dat
         }
     } ;
     
-
     @Override
     public Iterator<Node> listGraphNodes()
     {

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=1143883&r1=1143882&r2=1143883&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 Thu Jul  7 15:26:17 2011
@@ -97,6 +97,9 @@ public class DatasetPrefixesTDB implemen
     
     /** Testing - dataset prefixes in-memory */
     public static DatasetPrefixesTDB testing() { return new DatasetPrefixesTDB() ; }
+    
+    public boolean isReadOnly() { return nodeTupleTable.isReadOnly() ; }
+    public void setReadOnly(boolean mode) { nodeTupleTable.setReadOnly(mode) ; }
 
     @Override
     public synchronized void insertPrefix(String graphName, String prefix, String uri)

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/QuadTable.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/QuadTable.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/QuadTable.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/QuadTable.java Thu Jul  7 15:26:17 2011
@@ -12,8 +12,6 @@ import java.util.Iterator ;
 
 import org.openjena.atlas.iterator.NullIterator ;
 import org.openjena.atlas.iterator.Transform ;
-import org.openjena.atlas.lib.Closeable ;
-import org.openjena.atlas.lib.Sync ;
 import org.openjena.atlas.lib.Tuple ;
 
 import com.hp.hpl.jena.graph.Node ;
@@ -22,8 +20,6 @@ import com.hp.hpl.jena.sparql.core.Quad 
 import com.hp.hpl.jena.tdb.index.TupleIndex ;
 import com.hp.hpl.jena.tdb.lib.TupleLib ;
 import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
-import com.hp.hpl.jena.tdb.nodetable.NodeTupleTable ;
-import com.hp.hpl.jena.tdb.nodetable.NodeTupleTableConcrete ;
 import com.hp.hpl.jena.tdb.sys.ConcurrencyPolicy ;
 
 
@@ -31,14 +27,11 @@ import com.hp.hpl.jena.tdb.sys.Concurren
  *  together with a node table.
  */
 
-public class QuadTable implements Sync, Closeable
+public class QuadTable extends TableBase
 {
-    final private NodeTupleTable table ;
-    private boolean syncNeeded = false ; 
-    
     public QuadTable(TupleIndex[] indexes, NodeTable nodeTable, ConcurrencyPolicy policy)
     {
-        table = new NodeTupleTableConcrete(4, indexes, nodeTable, policy);
+        super(4, indexes, nodeTable, policy);
     }
 
     /** Add a quad - return true if it was added, false if it already existed */
@@ -99,35 +92,10 @@ public class QuadTable implements Sync, 
         {
             return new Quad(item.get(0), item.get(1), item.get(2), item.get(3)) ;
         }} ; 
-    
-    
-    public NodeTupleTable getNodeTupleTable() { return table ; }
-
-    @Override
-    public void sync()
-    { 
-        if ( syncNeeded )
-            table.sync() ;
-        syncNeeded = false ;
-    }
-        
-
-    public boolean isEmpty()        { return table.isEmpty() ; }
-    
-    @Override
-    public void close()
-    { table.close() ; }
 
     /** Clear - does not clear the associated node tuple table */
     public void clearQuads()
     { table.clear() ; }
-
-//    /** Clear - including the associated node tuple table */
-//    public void clear()
-//    { 
-//        table.getTupleTable().clear() ;
-//        table.getNodeTable().clear() ;
-//    }
 }
 
 /*

Added: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TableBase.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TableBase.java?rev=1143883&view=auto
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TableBase.java (added)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TableBase.java Thu Jul  7 15:26:17 2011
@@ -0,0 +1,66 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hp.hpl.jena.tdb.store;
+
+import org.openjena.atlas.lib.Closeable ;
+import org.openjena.atlas.lib.Sync ;
+
+import com.hp.hpl.jena.tdb.index.TupleIndex ;
+import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
+import com.hp.hpl.jena.tdb.nodetable.NodeTupleTable ;
+import com.hp.hpl.jena.tdb.nodetable.NodeTupleTableConcrete ;
+import com.hp.hpl.jena.tdb.sys.ConcurrencyPolicy ;
+
+public class TableBase  implements Sync, Closeable
+{
+    final protected NodeTupleTable table ;
+    protected boolean syncNeeded = false ; 
+    
+    protected TableBase(int N, TupleIndex[] indexes, NodeTable nodeTable, ConcurrencyPolicy policy)
+    {
+        table = new NodeTupleTableConcrete(N, indexes, nodeTable, policy) ;
+    }
+
+    public NodeTupleTable getNodeTupleTable() { return table ; }
+    
+    public void setReadOnly(boolean mode)   { table.setReadOnly(mode) ; }
+
+//  /** Clear - including the associated node tuple table */
+//  public void clear()
+//  { 
+//      table.getTupleTable().clear() ;
+//      table.getNodeTable().clear() ;
+//  }
+
+    @Override
+    public void sync()
+    { 
+        if ( syncNeeded )
+            table.sync() ;
+        syncNeeded = false ;
+    }
+
+    @Override
+    public void close()
+    { table.close() ; }
+    
+    public boolean isEmpty()        { return table.isEmpty() ; }
+    
+}
+

Propchange: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TableBase.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TripleTable.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TripleTable.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TripleTable.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TripleTable.java Thu Jul  7 15:26:17 2011
@@ -12,8 +12,6 @@ import java.util.Iterator ;
 
 import org.openjena.atlas.iterator.NullIterator ;
 import org.openjena.atlas.iterator.Transform ;
-import org.openjena.atlas.lib.Closeable ;
-import org.openjena.atlas.lib.Sync ;
 import org.openjena.atlas.lib.Tuple ;
 
 import com.hp.hpl.jena.graph.Node ;
@@ -21,8 +19,6 @@ import com.hp.hpl.jena.graph.Triple ;
 import com.hp.hpl.jena.tdb.index.TupleIndex ;
 import com.hp.hpl.jena.tdb.lib.TupleLib ;
 import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
-import com.hp.hpl.jena.tdb.nodetable.NodeTupleTable ;
-import com.hp.hpl.jena.tdb.nodetable.NodeTupleTableConcrete ;
 import com.hp.hpl.jena.tdb.sys.ConcurrencyPolicy ;
 
 
@@ -33,15 +29,12 @@ import com.hp.hpl.jena.tdb.sys.Concurren
  *   The node table form can map to and from NodeIds (longs)
  */
 
-public class TripleTable implements Sync, Closeable
+public class TripleTable extends TableBase
 {
-    final NodeTupleTable table ;
-    private boolean syncNeeded = false ; 
-    
     public TripleTable(TupleIndex[] indexes, NodeTable nodeTable, ConcurrencyPolicy policy)
     {
-        table = new NodeTupleTableConcrete(3, indexes, nodeTable, policy) ;
-        
+        super(3, indexes, nodeTable, policy) ;
+        //table = new NodeTupleTableConcrete(3, indexes, nodeTable, policy) ;
     }
     
     public boolean add( Triple triple ) 
@@ -86,33 +79,10 @@ public class TripleTable implements Sync
         {
             return new Triple(item.get(0), item.get(1), item.get(2)) ;
         }} ; 
-    
-    public NodeTupleTable getNodeTupleTable() { return table ; }
-
-    @Override
-    public void sync()
-    { 
-        if ( syncNeeded )
-            table.sync() ;
-        syncNeeded = false ;
-    }
-
-    @Override
-    public void close()
-    { table.close() ; }
-    
-    public boolean isEmpty()        { return table.isEmpty() ; }
-    
+   
     /** Clear - does not clear the associated node tuple table */
     public void clearTriples()
     { table.clear() ; }
-
-//    /** Clear - including the associated node tuple table */
-//    public void clear()
-//    { 
-//        table.getTupleTable().clear() ;
-//        table.getNodeTable().clear() ;
-//    }
 }
 
 /*

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/CachingTDBMaker.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/CachingTDBMaker.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/CachingTDBMaker.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/CachingTDBMaker.java Thu Jul  7 15:26:17 2011
@@ -74,7 +74,7 @@ public final class CachingTDBMaker imple
         String absPath = location.getDirectoryPath() ;
         
         if ( ! cache.containsKey(absPath) )
-            if ( ! absPath.equals(Names.memName) )
+            if ( ! location.isMem() )
                 // Don't worry if a dataset in-memory is cached or not.
                 log.warn("Not a cached location: "+absPath) ;
         log.debug("Remove from dataset cache: "+absPath) ;

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/Names.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/Names.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/Names.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/Names.java Thu Jul  7 15:26:17 2011
@@ -32,7 +32,8 @@ public class Names
     /** Node file */
     public static final String extNodeData              = "dat" ;           // Extension of node files
     public static final String extJournal               = "jrnl" ;          // Extension of node files.
-    public static final String journalFile              = "journal"+"."+extJournal ;
+    public static final String journalFileBase          = "journal" ;
+    public static final String journalFile              = journalFileBase+"."+extJournal ;
     
     public static final String indexId2Node             = "nodes" ;         // Node table
     public static final String indexNode2Id             = "node2id";        // Node hash to id table

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=1143883&r1=1143882&r2=1143883&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 Thu Jul  7 15:26:17 2011
@@ -51,7 +51,7 @@ public class BlockMgrJournal implements 
     @Override
     public void commit(Transaction txn)
     {
-        log.info("Commit {} {}", fileRef.getFilename(), writeBlocks.size()) ;
+        //log.info("Commit {} {}", fileRef.getFilename(), writeBlocks.size()) ;
         for ( Block blk : writeBlocks.values() )
             writeJournalEntry(blk) ;
     }

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=1143883&r1=1143882&r2=1143883&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 Thu Jul  7 15:26:17 2011
@@ -59,6 +59,9 @@ public class DatasetBuilderTxn
         
         DatasetBuilderStd x = new DatasetBuilderStd(blockMgrBuilder, nodeTableBuilder) ;
         DatasetGraphTDB dsg2 = x.build(dsg.getLocation(), dsg.getConfig().properties) ;
+        
+        dsg.setReadOnly(true) ;
+        
         return new DatasetGraphTxnTDB(dsg2, txn) ;
         
     }

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Journal.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Journal.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Journal.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Journal.java Thu Jul  7 15:26:17 2011
@@ -195,6 +195,13 @@ class Journal implements Iterable<Journa
 
     @Override
     public void close() { channel.close() ; }
+
+    public void truncate() { truncate(0) ; }
+    
+    private void truncate(long posn)
+    {
+        channel.truncate(posn) ;
+    }
 }
 
 /*

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=1143883&r1=1143882&r2=1143883&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 Thu Jul  7 15:26:17 2011
@@ -48,7 +48,6 @@ public class NodeTableTrans implements N
     public NodeTableTrans(NodeTable sub, Index nodeIndex, ObjectFile journal)
     {
         this.base = sub ;
-
         this.nodeIndex = nodeIndex ;
         this.journal = journal ;
         nodeTableJournal = new NodeTableNative(nodeIndex, journal) ;
@@ -157,14 +156,22 @@ public class NodeTableTrans implements N
             throw new TDBTransactionException("Not in a transaction for a commit to happen") ; 
         append() ;
         base.sync() ;
-        //other.reposition(0) ;
-        passthrough = true ;
+        clearUp() ;
     }
 
     @Override
     public void abort(Transaction txn)
     {
-//        other.reposition(0) ;
+        clearUp() ;
+    }
+    
+    private void clearUp()
+    {
+        passthrough = true ;
+        //nodeIndex ;
+        journal.reposition(0) ;
+        journal.close() ;
+        nodeTableJournal = null ;
     }
     
     @Override

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=1143883&r1=1143882&r2=1143883&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 Thu Jul  7 15:26:17 2011
@@ -13,7 +13,6 @@ import java.util.List ;
 
 import com.hp.hpl.jena.tdb.sys.FileRef ;
 
-
 /** A transaction handle */
 public class Transaction
 {
@@ -22,6 +21,8 @@ public class Transaction
     private final TransactionManager txnMgr ;
     private final List<Iterator<?>> iterators ; 
     private Journal journal = null ;
+    private enum State { ACTIVE, COMMITED, ABORTED } 
+    private State state ;
     
     private final List<NodeTableTrans> nodeTableTrans = new ArrayList<NodeTableTrans>() ;
     private final List<BlockMgrJournal> blkMgrs = new ArrayList<BlockMgrJournal>() ;
@@ -32,10 +33,14 @@ public class Transaction
         this.txnMgr = txnMgr ;
         //this.journal = journal ;
         this.iterators = new ArrayList<Iterator<?>>() ;
+        state = State.ACTIVE ;
     }
 
     public void commit()
     {
+        if ( state != State.ACTIVE )
+            throw new TDBTransactionException("Transaction has already committed or aborted") ; 
+        
         for ( BlockMgrJournal x : blkMgrs )
             x.commit(this) ;
         
@@ -49,12 +54,18 @@ public class Transaction
     
     public void abort()
     { 
+        if ( state != State.ACTIVE )
+            throw new TDBTransactionException("Transaction has already committed or aborted") ; 
+        
+        journal.truncate() ;
+
         // Clearup.
         for ( BlockMgrJournal x : blkMgrs )
             x.abort(this) ;
         
         for ( NodeTableTrans x : nodeTableTrans )
             x.abort(this) ;
+        
     }
     
     

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=1143883&r1=1143882&r2=1143883&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 Thu Jul  7 15:26:17 2011
@@ -9,6 +9,8 @@ package com.hp.hpl.jena.tdb.transaction;
 
 import java.util.Iterator ;
 
+import com.hp.hpl.jena.query.DataSource ;
+import com.hp.hpl.jena.query.Dataset ;
 import com.hp.hpl.jena.sparql.core.DatasetGraph ;
 import com.hp.hpl.jena.tdb.TDBException ;
 import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
@@ -19,6 +21,18 @@ public class TransactionManager
 {
     static long transactionId = 10 ;
     
+    public static DataSource begin(Dataset ds) 
+    {
+        return null ;
+    }
+    
+    public static DataSource commit(Dataset ds) 
+    {
+        return null ;
+    }
+    
+    
+    
     public TransactionManager()
     {
     }