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/08/30 23:01:01 UTC

svn commit: r1163380 - 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/base/objectfile/ src/main/java/com/hp/hpl/jena/tdb/nodetable/ src/main/java/com/hp/hpl/jena/t...

Author: andy
Date: Tue Aug 30 21:00:59 2011
New Revision: 1163380

URL: http://svn.apache.org/viewvc?rev=1163380&view=rev
Log:
Mysterious

Added:
    incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91a.java   (contents, props changed)
      - copied, changed from r1163263, incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91.java
Modified:
    incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Builder.java
    incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/FileFactory.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/objectfile/ObjectFileStorage.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTable.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableCache.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableFactory.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableLogger.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableNative.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableSink.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableWrapper.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/setup/Builder.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/JournalControl.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java
    incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/objectfile/TestStringFileMem.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/TestNodeTableTransMem.java

Modified: incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Builder.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Builder.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Builder.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Builder.java Tue Aug 30 21:00:59 2011
@@ -112,10 +112,11 @@ public final class Builder
     
     public static ObjectFile createObjectFile(FileSet fileset)
     {
+        String x = fileset.filename(Names.extNodeData) ;
         if ( fileset.isMem() )
-            return FileFactory.createObjectFileMem() ;
+            return FileFactory.createObjectFileMem(x) ;
         else
-            return FileFactory.createObjectFileDisk(fileset.filename(Names.extNodeData)) ;
+            return FileFactory.createObjectFileDisk(x) ;
     }
     
     private static Params params = new Params() ;

Modified: incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91.java Tue Aug 30 21:00:59 2011
@@ -18,21 +18,22 @@
 
 package tx;
 
-import java.util.Iterator;
+import java.util.Iterator ;
 
 import org.openjena.atlas.lib.FileOps ;
-import org.openjena.atlas.lib.Pair;
+import org.openjena.atlas.lib.Pair ;
 
-import com.hp.hpl.jena.graph.Node;
-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.base.file.Location;
-import com.hp.hpl.jena.tdb.nodetable.NodeTable;
-import com.hp.hpl.jena.tdb.store.NodeId;
+import com.hp.hpl.jena.graph.Node ;
+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.base.file.Location ;
+import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
+import com.hp.hpl.jena.tdb.store.NodeId ;
 
 public class Report_JENA91 {
     
+    //static { Log.setLog4j() ; }
     static Location LOC = Location.mem() ; // new Location("tmp/J91") ;
     
     static {

Copied: incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91a.java (from r1163263, incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91.java)
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91a.java?p2=incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91a.java&p1=incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91.java&r1=1163263&r2=1163380&rev=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91a.java Tue Aug 30 21:00:59 2011
@@ -18,62 +18,96 @@
 
 package tx;
 
-import java.util.Iterator;
+import java.util.Iterator ;
 
 import org.openjena.atlas.lib.FileOps ;
-import org.openjena.atlas.lib.Pair;
+import org.openjena.atlas.lib.Pair ;
+import org.openjena.atlas.logging.Log ;
+import org.slf4j.Logger ;
+import org.slf4j.LoggerFactory ;
+
+import com.hp.hpl.jena.graph.Node ;
+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.base.file.Location ;
+import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
+import com.hp.hpl.jena.tdb.store.NodeId ;
 
-import com.hp.hpl.jena.graph.Node;
-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.base.file.Location;
-import com.hp.hpl.jena.tdb.nodetable.NodeTable;
-import com.hp.hpl.jena.tdb.store.NodeId;
-
-public class Report_JENA91 {
+public class Report_JENA91a {
+    
+    static { Log.setLog4j() ; }
+    static Logger log = LoggerFactory.getLogger("JENA-91") ;  
     
-    static Location LOC = Location.mem() ; // new Location("tmp/J91") ;
+    static Location LOC = Location.mem() ;
+    //static Location LOC = new Location("tmp/J91") ;
     
     static {
         if ( ! LOC.isMem() )
             FileOps.clearDirectory(LOC.getDirectoryPath()) ;
     }
     
-    // Make sure you have "false" in FileFactory.createObjectFileMem
-    // Later: go back and flip to get old mem specific failure.
+    // Note to AFS:
+    // **** Make sure you have "false" in FileFactory.createObjectFileMem
+    // **** Later: go back and flip to get old mem specific failure.
+    
+    // ?? Offset in W3 should be offset of W2 + offset of W1 (=base)
+    // ?? Maybe it's offset of base only. 
     
     private static StoreConnection sConn = StoreConnection.make(LOC) ;
     private static Node g = Node.createURI("g") ;
     private static Node s = Node.createURI("s") ;
     private static Node p = Node.createURI("p") ;
+    private static Node o0 = Node.createLiteral("o") ;
     private static Node o1 = Node.createLiteral("o1") ;
     private static Node o2 = Node.createLiteral("o2") ;
     private static Node o3 = Node.createLiteral("o3") ;
 
     public static void main(String[] args) {
+        
+//        DatasetGraphTxn dsgW0 = sConn.begin(ReadWrite.WRITE) ;
+//        dsgW0.add(g, s, p, o0) ;
+//        dsgW0.commit() ;
+//        dsgW0.close() ;
+        
+        
+        log.info("Begin: R1") ;
         DatasetGraphTxn dsgR1 = sConn.begin(ReadWrite.READ) ;
-        // dumpNodeTable("R1", dsgR1) ;
+        dumpNodeTable("R1", dsgR1) ;
         
+        log.info("Begin: W1") ;
         DatasetGraphTxn dsgW1 = sConn.begin(ReadWrite.WRITE) ;
         dsgW1.add(g, s, p, o1) ;
-        dsgW1.commit() ;
+        dumpNodeTable("R1-0", dsgR1) ;
         dumpNodeTable("W1", dsgW1) ;
-        dumpNodeTable("R1", dsgR1) ;
+        log.info("Commit: W1") ;
+        dsgW1.commit() ;
+        dsgW1.close() ;
 
+        dumpNodeTable("R1-1", dsgR1) ;
+        
+        //ObjectFileStorage.logging = true ;
+        log.info("Begin: W2") ;
         DatasetGraphTxn dsgW2 = sConn.begin(ReadWrite.WRITE) ;
         dsgW2.add(g, s, p, o2) ;
-        dsgW2.commit() ;
-        dumpNodeTable("W2", dsgW2) ;
-        dumpNodeTable("R1", dsgR1) ;
 
+        dumpNodeTable("R1-2", dsgR1) ;
+        dumpNodeTable("W2", dsgW2) ;
+        log.info("Commit: W2") ;
+        dsgW2.commit() ;
+        dsgW2.close() ;
+        dumpNodeTable("R1-3", dsgR1) ;
+        
+        log.info("Begin: W3") ;
         DatasetGraphTxn dsgW3 = sConn.begin(ReadWrite.WRITE) ;
         dsgW3.add(g, s, p, o3) ;
+        dumpNodeTable("R1-4", dsgR1) ;
         dumpNodeTable("W3", dsgW3) ;
-        dumpNodeTable("R1", dsgR1) ;
+        log.info("Commit: W3") ;
         dsgW3.commit() ;
-
+        dumpNodeTable("R1-5", dsgR1) ;
         dsgR1.close() ;
+        
         System.out.println("DONE") ;
     }
     

Propchange: incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Report_JENA91a.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/FileFactory.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/FileFactory.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/FileFactory.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/FileFactory.java Tue Aug 30 21:00:59 2011
@@ -17,8 +17,8 @@ public class FileFactory
     public static StringFile createStringFileDisk(String filename)
     { return new StringFile(createObjectFileDisk(filename)) ; }
 
-    public static StringFile createStringFileMem()
-    { return new StringFile(createObjectFileMem()) ; }
+    public static StringFile createStringFileMem(String filename)
+    { return new StringFile(createObjectFileMem(filename)) ; }
     
     public static ObjectFile createObjectFileDisk(String filename)
     {
@@ -26,15 +26,15 @@ public class FileFactory
         return new ObjectFileStorage(file) ;
     }
 
-    public static ObjectFile createObjectFileMem()
+    public static ObjectFile createObjectFileMem(String filename)
     { 
         if ( false )
             // Older code.
-            return new ObjectFileMem() ;
+            return new ObjectFileMem(filename) ;
         else
         {
             // Newer way.
-            BufferChannel file = BufferChannelMem.create("mem") ; 
+            BufferChannel file = BufferChannelMem.create(filename) ; 
             return new ObjectFileStorage(file) ;
         }
     }

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/objectfile/ObjectFileStorage.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/objectfile/ObjectFileStorage.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/objectfile/ObjectFileStorage.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/objectfile/ObjectFileStorage.java Tue Aug 30 21:00:59 2011
@@ -16,6 +16,8 @@ import org.openjena.atlas.iterator.Iter 
 import org.openjena.atlas.iterator.IteratorSlotted ;
 import org.openjena.atlas.lib.Pair ;
 import org.openjena.atlas.logging.Log ;
+import org.slf4j.Logger ;
+import org.slf4j.LoggerFactory ;
 
 import com.hp.hpl.jena.tdb.base.block.Block ;
 import com.hp.hpl.jena.tdb.base.file.BufferChannel ;
@@ -28,6 +30,14 @@ import com.hp.hpl.jena.tdb.sys.SystemTDB
 
 public class ObjectFileStorage implements ObjectFile 
 {
+    private static Logger log = LoggerFactory.getLogger(ObjectFileStorage.class) ;
+    public static boolean logging = false ;
+    private void log(String fmt, Object... args)
+    { 
+        if ( ! logging ) return ;
+        log.info(state()+" "+String.format(fmt, args)) ;
+    }
+    
     /* 
      * No synchronization - assumes that the caller has some appropriate lock
      * because the combination of file and cache operations needs to be thread safe.
@@ -62,18 +72,23 @@ public class ObjectFileStorage implement
     {
         this.file = file ;
         filesize = file.size() ;
+        log("File size: 0x%X, posn: 0x%X", filesize, file.position()) ;
+        //writeBuffer = null ; 
         writeBuffer = (bufferSize >= 0) ? ByteBuffer.allocate(bufferSize) : null ;
     }
     
     @Override
     public long write(ByteBuffer bb)
     {
+        log("W") ;
+        
         if ( inAllocWrite )
             Log.fatal(this, "In the middle of an alloc-write") ;
         inAllocWrite = false ;
         if ( writeBuffer == null )
         {
             long x = rawWrite(bb) ;
+            log("W -> 0x%X", x);
             return x ;
         }
         
@@ -86,17 +101,20 @@ public class ObjectFileStorage implement
         if ( writeBuffer.position()+spaceNeeded > writeBuffer.capacity() )
         {
             long x = rawWrite(bb) ;
+            log("W -> 0x%X", x);
             return x ;
         }
         
         long loc = writeBuffer.position()+filesize ;
         writeBuffer.putInt(len) ;
         writeBuffer.put(bb) ;
+        log("W -> 0x%X", loc);
         return loc ;
     }
     
     private long rawWrite(ByteBuffer bb)
     {
+        log("RW %s", bb) ;
         int len = bb.limit() - bb.position() ;
         lengthBuffer.rewind() ;
         lengthBuffer.putInt(len) ;
@@ -107,12 +125,17 @@ public class ObjectFileStorage implement
         if ( x != len )
             throw new FileException() ;
         filesize = filesize+x+SizeOfInt ;
+        
+        if ( logging )
+            log("Posn: %d", file.position());
+        log("RW ->0x%X",location) ;
         return location ;
     }
     
     @Override
     public Block allocWrite(int bytesSpace)
     {
+        //log.info("AW("+bytesSpace+"):"+state()) ;
         if ( inAllocWrite )
             Log.fatal(this, "In the middle of an alloc-write") ;
         
@@ -130,6 +153,7 @@ public class ObjectFileStorage implement
             ByteBuffer bb = ByteBuffer.allocate(bytesSpace) ;
             allocBlock = new Block(filesize, bb) ;  
             allocLocation = -1 ;
+            //log.info("AW:"+state()+"-> ----") ;
             return allocBlock ;
         }
         
@@ -146,12 +170,14 @@ public class ObjectFileStorage implement
         ByteBuffer bb = writeBuffer.slice() ;
 
         allocBlock = new Block(allocLocation, bb) ;
+        //log.info("AW:"+state()+"->0x"+Long.toHexString(allocLocation)) ;
         return allocBlock ;
     }
 
     @Override
     public void completeWrite(Block block)
     {
+        log("CW: %s @0x%X",block, allocLocation) ;
         if ( ! inAllocWrite )
             throw new FileException("Not in the process of an allocated write operation pair") ;
         if ( allocBlock != null && ( allocBlock.getByteBuffer() != block.getByteBuffer() ) )
@@ -181,6 +207,7 @@ public class ObjectFileStorage implement
 
     private void flushOutputBuffer()
     {
+        log("Flush") ;
         if ( writeBuffer == null ) return ;
         if ( writeBuffer.position() == 0 ) return ;
         long location = filesize ;
@@ -188,6 +215,7 @@ public class ObjectFileStorage implement
         int x = file.write(writeBuffer) ;
         filesize += x ;
         writeBuffer.clear() ;
+        log("Flush") ;
     }
 
     @Override
@@ -211,6 +239,8 @@ public class ObjectFileStorage implement
     @Override
     public ByteBuffer read(long loc)
     {
+        log("R(0x%X)", loc) ;
+        
         if ( inAllocWrite )
             throw new FileException("In the middle of an alloc-write") ;
         if ( loc < 0 )
@@ -253,6 +283,9 @@ public class ObjectFileStorage implement
         }
         
         ByteBuffer bb = ByteBuffer.allocate(len) ;
+        if ( len == 0 )
+            // Zero bytes.
+            return bb ;
         x = file.read(bb, loc+SizeOfInt) ;
         bb.flip() ;
         if ( x != len )
@@ -283,7 +316,7 @@ public class ObjectFileStorage implement
     public Iterator<Pair<Long, ByteBuffer>> all()
     {
         flushOutputBuffer() ;
-        file.position(0) ; 
+        //file.position(0) ; 
         ObjectIterator iter = new ObjectIterator(0, filesize) ;
         //return iter ;
         
@@ -291,6 +324,15 @@ public class ObjectFileStorage implement
         return Iter.concat(iter, new BufferIterator(writeBuffer)) ;
     }
     
+    private String state()
+    {
+        if ( writeBuffer == null )
+            return String.format(getLabel()+": filesize=0x%X, file=(0x%X, 0x%X)", filesize, file.position(), file.size()) ;
+        else
+            return String.format(getLabel()+": filesize=0x%X, file=(0x%X, 0x%X), writeBuffer=(0x%X,0x%X)", filesize, file.position(), file.size(), writeBuffer.position(), writeBuffer.limit()) ;
+        
+    }
+
     private class BufferIterator extends IteratorSlotted<Pair<Long, ByteBuffer>> implements Iterator<Pair<Long, ByteBuffer>>
     {
         private ByteBuffer buffer ;
@@ -349,8 +391,11 @@ public class ObjectFileStorage implement
         @Override
         public Pair<Long, ByteBuffer> next()
         {
+            // read, but reserving the file position.
             long x = current ;
+            long filePosn = file.position() ;
             ByteBuffer bb = read(current) ;
+            file.position(filePosn) ;
             current = current + bb.limit() + 4 ; 
             return new Pair<Long, ByteBuffer>(x, bb) ;
         }

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTable.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTable.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTable.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTable.java Tue Aug 30 21:00:59 2011
@@ -36,7 +36,11 @@ public interface NodeTable extends Sync,
     public Iterator<Pair<NodeId, Node>> all() ;
     
     /** The offset needed to predicate allocation difference between peristent tables - internal function */  
-    public NodeId allocOffset() ; 
+    public NodeId allocOffset() ;
+    
+    /** Any thing there? */  
+    public boolean isEmpty() ; 
+
 }
 
 /*

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableCache.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableCache.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableCache.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableCache.java Tue Aug 30 21:00:59 2011
@@ -34,6 +34,7 @@ public class NodeTableCache implements N
     // Cache update needed on NodeTable changes because a node may become "known"
     private CacheSet<Node> notPresent ;
     private NodeTable baseTable ;
+    private Object lock = new Object() ;
 
     public static NodeTable create(NodeTable nodeTable, int nodeToIdCacheSize, int idToNodeCacheSize)
     {
@@ -76,7 +77,7 @@ public class NodeTableCache implements N
         if ( NodeId.isAny(id) )
             return null ;
 
-        synchronized (this)
+        synchronized (lock)
         {
             Node n = cacheLookup(id) ;   // Includes known to not exist
             if ( n != null )
@@ -98,7 +99,7 @@ public class NodeTableCache implements N
         if ( node == Node.ANY )
             return NodeId.NodeIdAny ;
         
-        synchronized (this)
+        synchronized (lock)
         {
             // Check caches.
             NodeId nodeId = cacheLookup(node) ;
@@ -171,6 +172,20 @@ public class NodeTableCache implements N
     }
     
     @Override
+    public boolean isEmpty()
+    {
+        synchronized (lock)
+        {
+            if ( node2id_Cache != null )
+                return node2id_Cache.isEmpty() ;
+            if ( id2node_Cache != null )
+                id2node_Cache.isEmpty() ;
+            // Write through.
+            return baseTable.isEmpty() ;
+        }
+    }
+
+    @Override
     public synchronized void close()
     {
         if ( baseTable == null )

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableFactory.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableFactory.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableFactory.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableFactory.java Tue Aug 30 21:00:59 2011
@@ -58,10 +58,12 @@ public class NodeTableFactory
                                    FileSet fsIdToNode, FileSet fsNodeToId,
                                    int nodeToIdCacheSize, int idToNodeCacheSize)
     {
+        String filename = fsIdToNode.filename(Names.extNodeData) ;
+        
         if ( fsNodeToId.isMem() )
         {
             Index nodeToId = indexBuilder.newIndex(FileSet.mem(), SystemTDB.nodeRecordFactory) ;
-            ObjectFile objects = FileFactory.createObjectFileMem() ;
+            ObjectFile objects = FileFactory.createObjectFileMem(filename) ;
             NodeTable nodeTable = new NodeTableNative(nodeToId, objects) ;
             
             nodeTable = NodeTableCache.create(nodeTable, 100, 100) ; 
@@ -74,7 +76,6 @@ public class NodeTableFactory
         
         Index nodeToId = indexBuilder.newIndex(fsNodeToId, SystemTDB.nodeRecordFactory) ;
         // Node table.
-        String filename = fsIdToNode.filename(Names.extNodeData) ;
         ObjectFile objects = FileFactory.createObjectFileDisk(filename);
         NodeTable nodeTable = new NodeTableNative(nodeToId, objects) ;
         nodeTable = NodeTableCache.create(nodeTable, nodeToIdCacheSize, idToNodeCacheSize) ; 

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableLogger.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableLogger.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableLogger.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableLogger.java Tue Aug 30 21:00:59 2011
@@ -74,6 +74,14 @@ public class NodeTableLogger implements 
     }
 
     @Override
+    public boolean isEmpty()
+    {
+        boolean b = nodeTable.isEmpty() ; 
+        info("isEmpty() => "+b) ;
+        return b ;
+    }
+
+    @Override
     public void sync()
     {
         info("sync()") ;

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableNative.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableNative.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableNative.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableNative.java Tue Aug 30 21:00:59 2011
@@ -242,6 +242,12 @@ public class NodeTableNative implements 
     
     @Override
     public String toString() { return objects.getLabel() ; }
+
+    @Override
+    public boolean isEmpty()
+    {
+        return false ;
+    }
 }
 /*
  * (c) Copyright 2008, 2009 Hewlett-Packard Development Company, LP

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableSink.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableSink.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableSink.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableSink.java Tue Aug 30 21:00:59 2011
@@ -57,7 +57,13 @@ public class NodeTableSink implements No
     }
     
     @Override
-    public void sync() { } 
+    public void sync() { }
+
+    @Override
+    public boolean isEmpty()
+    {
+        return false ;
+    } 
 }
 
 /*

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableWrapper.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableWrapper.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableWrapper.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTableWrapper.java Tue Aug 30 21:00:59 2011
@@ -58,12 +58,14 @@ public class NodeTableWrapper implements
     }
 
     @Override
+    public boolean isEmpty()    { return nodeTable.isEmpty() ; }
+    
+    @Override
     public void sync() { nodeTable.sync() ; } 
 
     @Override
     public void close()
     { nodeTable.close() ; }
-
 }
 
 /*

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/setup/Builder.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/setup/Builder.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/setup/Builder.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/setup/Builder.java Tue Aug 30 21:00:59 2011
@@ -173,9 +173,9 @@ public class Builder
         @Override
         public ObjectFile buildObjectFile(FileSet fileSet, String ext)
         {
-            if ( fileSet.isMem() )
-                return FileFactory.createObjectFileMem() ;
             String filename = fileSet.filename(ext) ;
+            if ( fileSet.isMem() )
+                return FileFactory.createObjectFileMem(filename) ;
             return FileFactory.createObjectFileDisk(filename) ;
         }
     }

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=1163380&r1=1163379&r2=1163380&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 Tue Aug 30 21:00:59 2011
@@ -113,11 +113,11 @@ public class DatasetBuilderTxn
             String objFilename = fsObjectFile.filename(Names.extNodeData+"-"+Names.extJournal) ;
             ObjectFile objectFile ;
             if ( fsObjectFile.isMem() )
-                objectFile = FileFactory.createObjectFileMem() ;
+                objectFile = FileFactory.createObjectFileMem(objFilename) ;
             else
                 objectFile = FileFactory.createObjectFileDisk(objFilename) ;
 
-            NodeTableTrans ntt = new NodeTableTrans(fsObjectFile.getBasename(), ntBase, idx, objectFile) ;
+            NodeTableTrans ntt = new NodeTableTrans(txn ,fsObjectFile.getBasename(), ntBase, idx, objectFile) ;
             txn.add(ntt) ;
             
             // Add inline wrapper.

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java Tue Aug 30 21:00:59 2011
@@ -213,7 +213,7 @@ public class JournalControl
         {
             syslog.info("Recovering node data: "+fileRef.getFilename()) ;
             ObjectFile dataJrnl = FileFactory.createObjectFileDisk(objFilename) ;
-            NodeTableTrans ntt = new NodeTableTrans(objFilename, baseNodeTable, new IndexMap(recordFactory), dataJrnl) ;
+            NodeTableTrans ntt = new NodeTableTrans(null, objFilename, baseNodeTable, new IndexMap(recordFactory), dataJrnl) ;
             ntt.append() ;
             ntt.close() ;
             dataJrnl.close() ;

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=1163380&r1=1163379&r2=1163380&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 Tue Aug 30 21:00:59 2011
@@ -51,20 +51,23 @@ public class NodeTableTrans implements N
     // Always zero currently but allows for future  
     private long journalStartOffset ; 
     private final String label ;
+    private final Transaction txn ;     // Can be null (during recovery).
     
-    public NodeTableTrans(String label, NodeTable sub, Index nodeIndex, ObjectFile journal)
+    public NodeTableTrans(Transaction txn, String label, NodeTable sub, Index nodeIndex, ObjectFile journal)
     {
+        this.txn = txn ;
         this.base = sub ;
         this.nodeIndex = nodeIndex ;
         this.journal = journal ;
         this.label = label ; 
         // Show the way tables are wired up
-        // log.info(String.format("NTT[%s #%s] %s", label, Integer.toHexString(hashCode()), sub)) ;
+        debug("NTT[%s #%s] %s", label, Integer.toHexString(hashCode()), sub) ;
     }
 
     public void setPassthrough(boolean v)   { passthrough = v ; }
     public NodeTable getBaseNodeTable()     { return base ; }
     public NodeTable getJournalTable()      { return nodeTableJournal ; }
+    public Transaction getTransaction()     { return txn ; }
     
     @Override
     public NodeId getAllocateNodeId(Node node)
@@ -117,19 +120,29 @@ public class NodeTableTrans implements N
     @Override
     public NodeId allocOffset()
     {
-        NodeId x = nodeTableJournal.allocOffset() ;
-        return mapFromJournal(x) ;
+        NodeId x1 = nodeTableJournal.allocOffset() ;
+        NodeId x2 = mapFromJournal(x1) ;
+        debug("allocOffset: %s/%s %s -> %s [%d]", txn.getLabel(), label, x1, x2, offset) ;
+        return x2 ;
     }
 
     @Override
     public void begin(Transaction txn)
     {
+        if ( this.txn.getTxnId() != txn.getTxnId() )
+            throw new TDBException(String.format("Different transactions: %s %s", this.txn.getLabel(), txn.getLabel())) ;
+        
         passthrough = false ;
         
         offset = base.allocOffset().getId() ;
         // Any outstanding transactions
         long journalOffset = journal.length() ;
-        debug("begin: %s", label) ;
+        debug("begin: %s %s", txn.getLabel(), label) ;
+        debug("begin: base=%s  offset=0x%X journalOffset=0x%X", base, offset, journalOffset) ;
+        
+//        base.allocOffset().getId() ; // DBG
+//        journal.length() ; // DBG
+        
         offset += journalOffset ;
         this.nodeTableJournal = new NodeTableNative(nodeIndex, journal) ;
         this.nodeTableJournal = NodeTableCache.create(nodeTableJournal, CacheSize, CacheSize) ;
@@ -139,6 +152,8 @@ public class NodeTableTrans implements N
     /** Copy from the journal file to the real file */
     public /*temporary*/ void append()
     {
+        debug("append: %s",label) ;
+        
         // Assumes all() is in order from low to high.
         Iterator<Pair<NodeId, Node>> iter = nodeTableJournal.all() ;
         for ( ; iter.hasNext() ; )
@@ -146,9 +161,11 @@ public class NodeTableTrans implements N
             Pair<NodeId, Node> x = iter.next() ;
             NodeId nodeId = x.getLeft() ;
             Node node = x.getRight() ;
+            debug("append: %s -> %s", x, mapFromJournal(nodeId)) ;
+            // This does the write.
             NodeId nodeId2 = base.getAllocateNodeId(node) ;
             if ( ! nodeId2.equals(mapFromJournal(nodeId)) )
-                throw new TDBException(String.format("Different ids for %s: allocated: expected %s, got %s\n", node, mapFromJournal(nodeId), nodeId2)) ; 
+                throw new TDBException(String.format("Different ids for %s: allocated: expected %s, got %s", node, mapFromJournal(nodeId), nodeId2)) ; 
         }
     }
     
@@ -175,12 +192,31 @@ public class NodeTableTrans implements N
 
     private void writeNodeJournal()
     {
+        if ( nodeTableJournal.isEmpty() )
+            return ;
+        
+        NodeId x1 = base.allocOffset() ;
         append() ;
+        NodeId x2 = base.allocOffset() ;
+        
+        NodeId x3 = nodeTableJournal.allocOffset() ;
+        debug("writeNodeJournal: (base alloc before) %s -> (base alloc after) %s -> (nodeTableJournal) %s", x1, x2, x3) ;
+        
         nodeIndex.clear() ;
         journal.truncate(journalStartOffset) ;
         journal.sync() ;
         base.sync() ;
-        offset = base.allocOffset().getId() ;
+        
+        offset = base.allocOffset().getId() ; 
+//        
+//        long offset2 = 
+//        //debug("writeNodeJournal: %d -> %d", offset, offset2) ;
+//        offset = offset2 ;
+//        
+//        // ??
+//        long offset3 = nodeTableJournal.allocOffset().getId() ;
+//        debug("writeNodeJournal: %d -> %d", offset2, offset3) ;
+        
         passthrough = true ;
     }
 
@@ -218,6 +254,12 @@ public class NodeTableTrans implements N
     }
 
     @Override
+    public boolean isEmpty()
+    {
+        return nodeTableJournal.isEmpty() && base.isEmpty() ;
+    }
+
+    @Override
     public void sync()
     {}
 

Modified: incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/objectfile/TestStringFileMem.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/objectfile/TestStringFileMem.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/objectfile/TestStringFileMem.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/objectfile/TestStringFileMem.java Tue Aug 30 21:00:59 2011
@@ -15,7 +15,10 @@ public class TestStringFileMem extends A
     @Override
     protected StringFile createStringFile()
     {
-        return FileFactory.createStringFileMem() ;
+        // OLD
+        //return new StringFile(new ObjectFileMem(("mem-test"))) ;
+        // NEW
+        return FileFactory.createStringFileMem("mem-test") ;
     }
 
     @Override

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=1163380&r1=1163379&r2=1163380&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 Tue Aug 30 21:00:59 2011
@@ -39,20 +39,20 @@ public abstract class AbstractTestNodeTa
     abstract protected ObjectFile createObjectFile() ;
     abstract protected Location getLocation() ;
     
-    private NodeTableTrans create(Node...nodes)
+    private NodeTableTrans create(Transaction txn, Node...nodes)
     {
         NodeTable base = SetupTDB.makeNodeTable(getLocation()) ;
         for ( Node n : nodes )
             base.getAllocateNodeId(n) ;
-        return create(base) ;
+        return create(txn, base) ;
     }
     
-    private NodeTableTrans create(NodeTable base)
+    private NodeTableTrans create(Transaction txn, NodeTable base)
     {
         RecordFactory recordFactory = new RecordFactory(SystemTDB.LenNodeHash, SystemTDB.SizeOfNodeId) ;
         Index idx = new IndexMap(recordFactory) ;
         ObjectFile objectFile = createObjectFile() ;
-        NodeTableTrans ntt = new NodeTableTrans("test", base, idx, objectFile) ;
+        NodeTableTrans ntt = new NodeTableTrans(txn, "test", base, idx, objectFile) ;
         return ntt ;
     }
     
@@ -76,8 +76,8 @@ public abstract class AbstractTestNodeTa
     
     @Test public void nodetrans_01()
     {
-        NodeTableTrans ntt = create() ;
         Transaction txn = createTxn(11) ; 
+        NodeTableTrans ntt = create(txn) ;
         ntt.begin(txn) ;
         ntt.abort(txn) ;
     }
@@ -85,10 +85,10 @@ public abstract class AbstractTestNodeTa
     
     @Test public void nodetrans_02()
     {
-        NodeTableTrans ntt = create() ;
+        Transaction txn = createTxn(11) ; 
+        NodeTableTrans ntt = create(txn) ;
         NodeTable nt0 = ntt.getBaseNodeTable() ;
         
-        Transaction txn = createTxn(11) ; 
         ntt.begin(txn) ;
         // Add a node
         NodeId nodeId = ntt.getAllocateNodeId(node1) ;
@@ -108,10 +108,10 @@ public abstract class AbstractTestNodeTa
 
     @Test public void nodetrans_03()
     {
-        NodeTableTrans ntt = create() ;
-        NodeTable nt0 = ntt.getBaseNodeTable() ;
-        
         Transaction txn = createTxn(11) ; 
+        NodeTableTrans ntt = create(txn) ;
+        NodeTable nt0 = ntt.getBaseNodeTable() ;
+         
         ntt.begin(txn) ;
         // Add a node
         NodeId nodeId = ntt.getAllocateNodeId(node1) ;
@@ -130,9 +130,9 @@ public abstract class AbstractTestNodeTa
     
     @Test public void nodetrans_04()
     {
-        NodeTableTrans ntt = create(node1) ;
-        NodeTable nt0 = ntt.getBaseNodeTable() ;
         Transaction txn = createTxn(11) ; 
+        NodeTableTrans ntt = create(txn, node1) ;
+        NodeTable nt0 = ntt.getBaseNodeTable() ;
         ntt.begin(txn) ;
         // Add a node
         NodeId nodeId = ntt.getAllocateNodeId(node2) ;
@@ -151,7 +151,7 @@ public abstract class AbstractTestNodeTa
     
     // False test.  Not valid after ntt.commitClearup
 //    @Test 
-//    public void nodetrans_05()
+//    public void nodetrans_XX_01()
 //    {   
 //        // 2 transactions - no blocking reader 
 //        NodeTableTrans ntt = create(node1) ;
@@ -179,65 +179,65 @@ public abstract class AbstractTestNodeTa
 //        assertEquals(nodeId3, ntt.getBaseNodeTable().getNodeIdForNode(node3)) ;
 //    }
 
-    @Test 
-    public void nodetrans_06()
-    {   
-        // 2 transactions - blocking reader 
-        NodeTableTrans ntt = create(node1) ;
-        NodeTable ntt0 = ntt.getBaseNodeTable() ; 
-        NodeId nodeId1 = ntt0.getNodeIdForNode(node1) ;
-        
-        Transaction txn1 = createTxn(11) ; 
-        ntt.begin(txn1) ;
-        NodeId nodeId2 = ntt.getAllocateNodeId(node2) ;
-        assertNotEquals(nodeId1, nodeId2) ;
-        ntt.commitPrepare(txn1) ;
-        
-        assertEquals(nodeId1, ntt0.getNodeIdForNode(node1)) ;
-        assertEquals(nodeId2, ntt0.getNodeIdForNode(node2)) ;
-        
-        // READ - don't enact
-        
-        Transaction txn2 = createTxn(12) ; 
-        ntt.begin(txn2) ;
-        assertEquals(nodeId1, ntt.getNodeIdForNode(node1)) ;
-        ntt.getNodeIdForNode(node2) ;
-        assertEquals(nodeId2, ntt.getNodeIdForNode(node2)) ;
-        
-        NodeId nodeId3 = ntt.getAllocateNodeId(node3) ;
-        assertEquals(nodeId3, ntt.getNodeIdForNode(node3)) ;
-        ntt.commitPrepare(txn2) ;
-
-        // READ ends.
-        
-        ntt.commitEnact(txn1) ;
-        ntt.commitClearup(txn1) ;
-        
-        ntt.commitEnact(txn2) ;
-        ntt.commitClearup(txn2) ;
-
-        assertEquals(nodeId1, ntt.getBaseNodeTable().getNodeIdForNode(node1)) ;
-        assertEquals(nodeId2, ntt.getBaseNodeTable().getNodeIdForNode(node2)) ;
-        assertEquals(nodeId3, ntt.getBaseNodeTable().getNodeIdForNode(node3)) ;
-    }
+//    // False test.  One transaction - one NTT
+//    @Test 
+//    public void nodetrans_XX_02()
+//    {   
+//        // 2 transactions - blocking reader 
+//        Transaction txn1 = createTxn(11) ; 
+//        NodeTableTrans ntt = create(txn1, node1) ;
+//        NodeTable ntt0 = ntt.getBaseNodeTable() ; 
+//        NodeId nodeId1 = ntt0.getNodeIdForNode(node1) ;
+//        
+//        ntt.begin(txn1) ;
+//        NodeId nodeId2 = ntt.getAllocateNodeId(node2) ;
+//        assertNotEquals(nodeId1, nodeId2) ;
+//        ntt.commitPrepare(txn1) ;
+//        
+//        assertEquals(nodeId1, ntt0.getNodeIdForNode(node1)) ;
+//        assertEquals(nodeId2, ntt0.getNodeIdForNode(node2)) ;
+//        
+//        // READ - don't enact
+//        
+//        Transaction txn2 = createTxn(12) ; 
+//        ntt.begin(txn2) ;
+//        assertEquals(nodeId1, ntt.getNodeIdForNode(node1)) ;
+//        ntt.getNodeIdForNode(node2) ;
+//        assertEquals(nodeId2, ntt.getNodeIdForNode(node2)) ;
+//        
+//        NodeId nodeId3 = ntt.getAllocateNodeId(node3) ;
+//        assertEquals(nodeId3, ntt.getNodeIdForNode(node3)) ;
+//        ntt.commitPrepare(txn2) ;
+//
+//        // READ ends.
+//        
+//        ntt.commitEnact(txn1) ;
+//        ntt.commitClearup(txn1) ;
+//        
+//        ntt.commitEnact(txn2) ;
+//        ntt.commitClearup(txn2) ;
+//
+//        assertEquals(nodeId1, ntt.getBaseNodeTable().getNodeIdForNode(node1)) ;
+//        assertEquals(nodeId2, ntt.getBaseNodeTable().getNodeIdForNode(node2)) ;
+//        assertEquals(nodeId3, ntt.getBaseNodeTable().getNodeIdForNode(node3)) ;
+//    }
     
     @Test 
-    public void nodetrans_07()
+    public void nodetrans_05()
     {   
         // 2 transactions - no blocking reader - create a second NodeTableTrans
-        NodeTableTrans ntt1 = create(node1) ;
+        Transaction txn1 = createTxn(11) ; 
+        NodeTableTrans ntt1 = create(txn1, node1) ;
         NodeId nodeId1 = ntt1.getBaseNodeTable().getNodeIdForNode(node1) ;
         
-        Transaction txn1 = createTxn(11) ; 
         ntt1.begin(txn1) ;
         NodeId nodeId2 = ntt1.getAllocateNodeId(node2) ;
         ntt1.commitPrepare(txn1) ;
         ntt1.commitEnact(txn1) ;
         ntt1.commitClearup(txn1) ;
         
-        NodeTableTrans ntt2 = create(ntt1.getBaseNodeTable()) ;
-        
-        Transaction txn2 = createTxn(12) ; 
+        Transaction txn2 = createTxn(12) ;
+        NodeTableTrans ntt2 = create(txn2, ntt1.getBaseNodeTable()) ;
         ntt2.begin(txn2) ;
         assertEquals(nodeId1, ntt2.getNodeIdForNode(node1)) ;
         assertEquals(nodeId2, ntt2.getNodeIdForNode(node2)) ;
@@ -253,22 +253,20 @@ public abstract class AbstractTestNodeTa
     }
 
     @Test 
-    public void nodetrans_08()
+    public void nodetrans_06()
     {   
         // 2 transactions - blocking reader - create a second NodeTableTrans
-        NodeTableTrans ntt1 = create(node1) ;
+        Transaction txn1 = createTxn(11) ; 
+        NodeTableTrans ntt1 = create(txn1, node1) ;
         NodeId nodeId1 = ntt1.getBaseNodeTable().getNodeIdForNode(node1) ;
         
-        Transaction txn1 = createTxn(11) ; 
         ntt1.begin(txn1) ;
         NodeId nodeId2 = ntt1.getAllocateNodeId(node2) ;
         ntt1.commitPrepare(txn1) ;
         
         // READ - don't enact
-        
-        NodeTableTrans ntt2 = create(ntt1.getBaseNodeTable()) ;
-
         Transaction txn2 = createTxn(12) ; 
+        NodeTableTrans ntt2 = create(txn2, ntt1.getBaseNodeTable()) ;
         ntt2.begin(txn2) ;
         assertEquals(nodeId1, ntt2.getNodeIdForNode(node1)) ;
         assertEquals(nodeId2, ntt2.getNodeIdForNode(node2)) ;

Modified: incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/TestNodeTableTransMem.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/TestNodeTableTransMem.java?rev=1163380&r1=1163379&r2=1163380&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/TestNodeTableTransMem.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/TestNodeTableTransMem.java Tue Aug 30 21:00:59 2011
@@ -27,8 +27,7 @@ public class TestNodeTableTransMem exten
     @Override
     protected ObjectFile createObjectFile()
     {
-//        FileSet fs = new FileSet(getLocation(), "data") ;
-        return FileFactory.createObjectFileMem() ;
+        return FileFactory.createObjectFileMem("mem-trans") ;
     }
 
     @Override