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/06/17 18:20:15 UTC

svn commit: r1136924 - in /incubator/jena/Experimental/TxTDB/trunk: ./ src-dev/setup/ src-dev/tx/ src/main/java/com/hp/hpl/jena/tdb/base/block/ src/main/java/com/hp/hpl/jena/tdb/base/file/ src/main/java/com/hp/hpl/jena/tdb/index/bplustree/ src/main/jav...

Author: andy
Date: Fri Jun 17 16:20:14 2011
New Revision: 1136924

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

Removed:
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFile.java
Modified:
    incubator/jena/Experimental/TxTDB/trunk/D.ttl
    incubator/jena/Experimental/TxTDB/trunk/src-dev/setup/DatasetBuilderStd.java
    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/block/BlockMgr.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrBase.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFactory.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFileAccess.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrLogger.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrSync.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrTracker.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrWrapper.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccess.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessBase.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessByteArray.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMem.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/index/bplustree/BPlusTree.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/test/java/com/hp/hpl/jena/tdb/base/file/TestBlockAccessByteArray.java
    incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/file/TestBlockAccessMem.java

Modified: incubator/jena/Experimental/TxTDB/trunk/D.ttl
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/D.ttl?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
Binary files - no diff available.

Modified: incubator/jena/Experimental/TxTDB/trunk/src-dev/setup/DatasetBuilderStd.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src-dev/setup/DatasetBuilderStd.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/setup/DatasetBuilderStd.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/setup/DatasetBuilderStd.java Fri Jun 17 16:20:14 2011
@@ -369,15 +369,15 @@ public class DatasetBuilderStd implement
     
     public static class IndexBuilderStd implements IndexBuilder
     {
-        private BlockMgrBuilder bMgr1 ;
-        private BlockMgrBuilder bMgr2 ;
-        private RangeIndexBuilderStd other ;
-
-        public IndexBuilderStd(BlockMgrBuilder bMgr1, BlockMgrBuilder bMgr2)
-        {
-            this.bMgr1 = bMgr1 ;
-            this.bMgr2 = bMgr2 ;
-            this.other = new RangeIndexBuilderStd(bMgr1, bMgr2) ;
+        protected BlockMgrBuilder bMgrNodes ;
+        protected BlockMgrBuilder bMgrRecords ;
+        protected RangeIndexBuilderStd other ;
+
+        public IndexBuilderStd(BlockMgrBuilder bMgrNodes, BlockMgrBuilder bMgrRecords)
+        {
+            this.bMgrNodes = bMgrNodes ;
+            this.bMgrRecords = bMgrRecords ;
+            this.other = new RangeIndexBuilderStd(bMgrNodes, bMgrRecords) ;
         }
         
         @Override
@@ -390,12 +390,13 @@ public class DatasetBuilderStd implement
     
     public static class RangeIndexBuilderStd implements RangeIndexBuilder
     {
-        private BlockMgrBuilder bMgr1 ;
-        private BlockMgrBuilder bMgr2 ;
-        public RangeIndexBuilderStd(BlockMgrBuilder bMgr1, BlockMgrBuilder bMgr2)
+        private BlockMgrBuilder bMgrNodes ;
+        private BlockMgrBuilder bMgrRecords ;
+        public RangeIndexBuilderStd( BlockMgrBuilder blockMgrBuilderNodes,
+                                     BlockMgrBuilder blockMgrBuilderRecords)
         {
-            this.bMgr1 = bMgr1 ;
-            this.bMgr2 = bMgr2 ;
+            this.bMgrNodes = blockMgrBuilderNodes ;
+            this.bMgrRecords = blockMgrBuilderRecords ;
         }
 
         @Override
@@ -433,7 +434,7 @@ public class DatasetBuilderStd implement
             int readCacheSize = SystemTDB.BlockReadCacheSize ;
             int writeCacheSize = SystemTDB.BlockWriteCacheSize ;
 
-            RangeIndex rIndex = createBPTree(fileSet, order, blkSize, readCacheSize, writeCacheSize, bMgr1, bMgr2, recordFactory) ;
+            RangeIndex rIndex = createBPTree(fileSet, order, blkSize, readCacheSize, writeCacheSize, bMgrNodes, bMgrRecords, recordFactory) ;
             
             metafile.flush() ;
             return rIndex ;
@@ -443,8 +444,8 @@ public class DatasetBuilderStd implement
         private RangeIndex createBPTree(FileSet fileset, int order, 
                                         int blockSize,
                                         int readCacheSize, int writeCacheSize,
-                                        BlockMgrBuilder blockMgrBuilder1,
-                                        BlockMgrBuilder blockMgrBuilder2,
+                                        BlockMgrBuilder blockMgrBuilderNodes,
+                                        BlockMgrBuilder blockMgrBuilderRecords,
                                         RecordFactory factory)
         {
             // ---- Checking
@@ -468,8 +469,8 @@ public class DatasetBuilderStd implement
             
 //            BlockMgr blkMgrNodes = BlockMgrFactory.create(fileset, Names.bptExt1, blockSize, readCacheSize, writeCacheSize) ;
 //            BlockMgr blkMgrRecords = BlockMgrFactory.create(fileset, Names.bptExt2, blockSize, readCacheSize, writeCacheSize) ;
-            BlockMgr blkMgrNodes = blockMgrBuilder1.buildBlockMgr(fileset, Names.bptExt1, blockSize) ;
-            BlockMgr blkMgrRecords = blockMgrBuilder2.buildBlockMgr(fileset, Names.bptExt2, blockSize) ;
+            BlockMgr blkMgrNodes = blockMgrBuilderNodes.buildBlockMgr(fileset, Names.bptExt1, blockSize) ;
+            BlockMgr blkMgrRecords = blockMgrBuilderRecords.buildBlockMgr(fileset, Names.bptExt2, blockSize) ;
             
             return BPlusTree.create(params, blkMgrNodes, blkMgrRecords) ;
         }

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=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java Fri Jun 17 16:20:14 2011
@@ -2,6 +2,10 @@ package tx;
 
 public class DevTx
 {
+    // Transaction needs to do FileRef to file. 
+    
+    // Delete BlockMgrFile.
+    
     // Building a dataset.
     //   Commit and reply?
     //   Reattach a journal?

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=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java Fri Jun 17 16:20:14 2011
@@ -35,12 +35,14 @@ 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.QueryExecUtils ;
+import com.hp.hpl.jena.tdb.TDB ;
 import com.hp.hpl.jena.tdb.TDBFactory ;
 import com.hp.hpl.jena.tdb.TDBLoader ;
 import com.hp.hpl.jena.tdb.base.block.BlockMgr ;
 import com.hp.hpl.jena.tdb.base.block.BlockMgrFactory ;
 import com.hp.hpl.jena.tdb.base.block.BlockMgrLogger ;
 import com.hp.hpl.jena.tdb.base.block.BlockMgrTracker ;
+import com.hp.hpl.jena.tdb.base.block.FileMode ;
 import com.hp.hpl.jena.tdb.base.file.Location ;
 import com.hp.hpl.jena.tdb.base.objectfile.ObjectFile ;
 import com.hp.hpl.jena.tdb.base.record.Record ;
@@ -52,6 +54,8 @@ import com.hp.hpl.jena.tdb.index.RangeIn
 import com.hp.hpl.jena.tdb.index.bplustree.BPTreeNode ;
 import com.hp.hpl.jena.tdb.index.bplustree.BPlusTree ;
 import com.hp.hpl.jena.tdb.index.bplustree.BPlusTreeParams ;
+import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
+import com.hp.hpl.jena.tdb.sys.SystemTDB ;
 import com.hp.hpl.jena.tdb.transaction.DatasetBuilderTxn ;
 import com.hp.hpl.jena.tdb.transaction.DatasetGraphTxnTDB ;
 import com.hp.hpl.jena.tdb.transaction.Journal ;
@@ -97,10 +101,32 @@ public class TxMain
             exit(0) ;
         }
         
-        DatasetGraphTxnTDB dsg = build() ;
-        //dsg.commit() ;
+//        FileOps.ensureDir("DB") ;
+//        FileOps.clearDirectory("DB") ;
+//        DatasetGraph dsg0 = TDBFactory.createDatasetGraph("DB") ;
+//        load("D.ttl", dsg0) ;
+//        query("SELECT (Count(*) AS ?c) { ?s ?p ?o }", dsg0) ;
+//        exit(0) ;
+        
+        SystemTDB.setFileMode(FileMode.direct) ;
+        DatasetGraphTDB dsg0 = build() ;
+//        load("D.ttl", dsg0) ;
+//        query("SELECT * { ?s ?p ?o }", dsg0) ;
+//        exit(0) ;
+        
+        DatasetGraphTxnTDB dsg = buildTx(dsg0) ;
         load("D.ttl", dsg) ;
-        query("SELECT (Count(*) AS ?c) { ?s ?p ?o }", dsg) ;
+        //dsg.commit() ;
+        //query("SELECT (Count(*) AS ?c) { ?s ?p ?o }", dsg) ;
+        System.out.println("Start query") ;
+        query("SELECT * { ?s ?p ?o }", dsg) ;
+        //query("SELECT * { ?s ?p ?o }", dsg0) ;
+
+        exit(0) ;
+        System.out.println("Commit") ;
+        dsg.commit() ;
+        query("SELECT * { ?s ?p ?o }", dsg) ;
+        
         exit(0) ;
         
         //tree_ins_2_01() ; exit(0) ;
@@ -113,15 +139,20 @@ public class TxMain
         bpTreeTracking() ; exit(0) ;
     }
     
-    private static DatasetGraphTxnTDB build()
+    private static DatasetGraphTDB build()
     {
         FileOps.ensureDir("DB") ;
         FileOps.clearDirectory("DB") ;
-        DatasetGraph dsg = TDBFactory.createDatasetGraph("DB") ;
+        DatasetGraphTDB dsg = TDBFactory.createDatasetGraph("DB") ;
+        return dsg ;
+    }
+
+    private static DatasetGraphTxnTDB buildTx(DatasetGraph dsg)
+    {
         DatasetGraphTxnTDB dsg2 = new TransactionManager().begin(dsg) ;
         return dsg2 ;
     }
-
+    
     private static void dump(ObjectFile file)
     {
         Iterator<Pair<Long, ByteBuffer>> iter = file.all() ;
@@ -354,14 +385,14 @@ public class TxMain
         BlockMgr mgr1 = BlockMgrFactory.createMem("B1", nodeBlkSize) ;
         
         if ( tracking )
-            mgr1 = new BlockMgrTracker("BlkMgr/Nodes", mgr1) ;
+            mgr1 = BlockMgrTracker.track(mgr1) ;
         if ( logging )
             mgr1 = new BlockMgrLogger("BlkMgr/Nodes", mgr1, true) ;
         
         BlockMgr mgr2 = BlockMgrFactory.createMem("B2", recBlkSize) ;
     
         if ( tracking )
-            mgr2 = new BlockMgrTracker("BlkMgr/Records", mgr2) ;
+            mgr2 = BlockMgrTracker.track(mgr2) ;
         if ( logging )
             mgr2 = new BlockMgrLogger("BlkMgr/Records", mgr2, true) ;
         
@@ -376,7 +407,7 @@ public class TxMain
         QueryExecUtils.executeQuery(query, qExec) ;
     }
     
-    private static void load(String file, DatasetGraphTxnTDB dsg)
+    private static void load(String file, DatasetGraph dsg)
     {
         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/base/block/BlockMgr.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgr.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgr.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgr.java Fri Jun 17 16:20:14 2011
@@ -58,7 +58,6 @@ public interface BlockMgr extends Sync, 
     @Override
     public void sync() ;
     
-    
     // This is not Session interface which si more an application facing
     // coarser granularity interface.  We also add iterator tracking.
     
@@ -80,6 +79,8 @@ public interface BlockMgr extends Sync, 
     /** Completion of iterator */
     public void endIterator(Iterator<?> iterator) ;
 
+    /* Label for hleping trace which BlockMgr is which */
+    public String getLabel() ;
 }
 
 /*

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrBase.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrBase.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrBase.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrBase.java Fri Jun 17 16:20:14 2011
@@ -9,16 +9,19 @@ package com.hp.hpl.jena.tdb.base.block;
 
 import java.util.Iterator ;
 
+import org.openjena.atlas.lib.FileOps ;
 import org.slf4j.Logger ;
 
 public abstract class BlockMgrBase implements BlockMgr
 {
     protected final int blockSize ;
+    private String label ;
     protected abstract Logger getLog() ;
 
     // Fixed size, fixed block type.
-    protected BlockMgrBase(int blockSize)
+    protected BlockMgrBase(String label, int blockSize)
     {
+        this.label = FileOps.basename(label) ;
         this.blockSize = blockSize ;
     }
 
@@ -31,6 +34,8 @@ public abstract class BlockMgrBase imple
     }
     
     protected abstract Block allocate() ;
+    
+    @Override final public String getLabel() { return label ; } 
 
     @Override public void beginIterator(Iterator<?> iter)   {}
     @Override public void endIterator(Iterator<?> iter)     {}

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFactory.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFactory.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFactory.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFactory.java Fri Jun 17 16:20:14 2011
@@ -7,24 +7,29 @@
 
 package com.hp.hpl.jena.tdb.base.block;
 
-import java.io.File;
+import org.openjena.atlas.lib.FileOps ;
 
-import com.hp.hpl.jena.tdb.TDBException;
+import com.hp.hpl.jena.tdb.TDBException ;
 import com.hp.hpl.jena.tdb.base.file.BlockAccess ;
 import com.hp.hpl.jena.tdb.base.file.BlockAccessDirect ;
 import com.hp.hpl.jena.tdb.base.file.BlockAccessMapped ;
 import com.hp.hpl.jena.tdb.base.file.BlockAccessMem ;
 import com.hp.hpl.jena.tdb.base.file.FileSet ;
-import com.hp.hpl.jena.tdb.sys.SystemTDB;
+import com.hp.hpl.jena.tdb.sys.SystemTDB ;
 
 
 public class BlockMgrFactory
 {
-    public /*final*/ static boolean AddTracker = true ;
+    // This isn't always helpful so be careful if setting the default to "true".
+    // Sometimes the tracking is too strict
+    //     e.g. transactions keep blocks and not release them down the layers.
+    //     But journal layers over a tracked BlockMgr is this is on. 
+    public /*final*/ static boolean AddTracker = false ;
+    
     public static BlockMgr tracker(BlockMgr blockMgr)
     {
         if ( blockMgr instanceof BlockMgrTracker ) return blockMgr ;
-        return new BlockMgrTracker(blockMgr) ;
+        return BlockMgrTracker.track(blockMgr) ;
     }
     
     /** Add a tracker if the system default is to do so */
@@ -45,7 +50,7 @@ public class BlockMgrFactory
     /** Create an in-memory block manager */ 
     public static BlockMgr createMem(String indexName, int blockSize)
     {
-        BlockAccess file = new BlockAccessMem(blockSize) ;
+        BlockAccess file = new BlockAccessMem(indexName, blockSize) ;
         BlockMgr blockMgr = new BlockMgrFileAccess(file, blockSize) ;
         blockMgr = new BlockMgrFreeChain(blockMgr) ;
 
@@ -82,10 +87,7 @@ public class BlockMgrFactory
         BlockAccess file = new BlockAccessDirect(filename, blockSize) ;
         BlockMgr blockMgr =  wrapFileAccess(file, blockSize) ;
 
-        String fn = filename ;
-        int j = filename.lastIndexOf(File.separatorChar) ;
-        if ( j > 0 )
-            fn = filename.substring(j+1) ;
+        String fn = FileOps.basename(filename) ;
         
         blockMgr = new BlockMgrCache(fn, readBlockCacheSize, writeBlockCacheSize, blockMgr) ;
         return track(blockMgr) ;

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFileAccess.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFileAccess.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFileAccess.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrFileAccess.java Fri Jun 17 16:20:14 2011
@@ -27,7 +27,7 @@ public class BlockMgrFileAccess extends 
     // Create via the BlockMgrFactory.
     /*package*/ BlockMgrFileAccess(BlockAccess blockAccess, int blockSize)
     {
-        super(blockSize) ;
+        super(blockAccess.getLabel(), blockSize) ;
         file = blockAccess ;
     }
     

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrLogger.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrLogger.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrLogger.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrLogger.java Fri Jun 17 16:20:14 2011
@@ -17,152 +17,171 @@ public class BlockMgrLogger implements B
     private final BlockMgr blockMgr ;
     protected final Logger log ;
     protected final boolean logAllOperations ;
+    private final String label ;
     
-    public BlockMgrLogger(String label, BlockMgr blockMgr, boolean logAllOperations )
+    public BlockMgrLogger(BlockMgr blockMgr, boolean logAllOperations )
     {
-        this(LoggerFactory.getLogger(label), blockMgr, logAllOperations) ;
+        this(null, blockMgr.getLabel(), blockMgr, logAllOperations) ;
     }
     
-    public BlockMgrLogger(Logger log, BlockMgr blockMgr, boolean logAllOperations )
+    public BlockMgrLogger(String label, BlockMgr blockMgr, boolean logAllOperations )
+    {
+        this(null, label, blockMgr, logAllOperations) ;
+    }
+
+    public BlockMgrLogger(Logger log, String label, BlockMgr blockMgr, boolean logAllOperations )
     {
         this.blockMgr = blockMgr ;
+        if ( log == null )
+            log = LoggerFactory.getLogger(BlockMgr.class) ;
         this.log = log ;
         this.logAllOperations = logAllOperations ;
+        this.label = label ;
     }
 
     @Override
+    public String getLabel() { return label ; }
+    
+    @Override
     public Block allocate(int blockSize)
     {
         Block x = blockMgr.allocate(blockSize) ;
-        log.info("Allocate("+x.getId()+")") ;
+        info("Allocate("+x.getId()+")") ;
         return x ;
     }
 
     @Override
     public boolean isEmpty()
     {
-        log.info("isEmpty") ;
+        info("isEmpty") ;
         return blockMgr.isEmpty() ;
     }
 
     @Override
     public Block getRead(long id)
     {
-        log.info("getRead("+id+")") ;
+        info("getRead("+id+")") ;
         return blockMgr.getRead(id) ;
     }
 
     @Override
     public Block getReadIterator(long id)
     {
-        log.info("getReadIterator("+id+")") ;
+        info("getReadIterator("+id+")") ;
         return blockMgr.getReadIterator(id) ;
     }
     
     @Override
     public Block getWrite(long id)
     {
-        log.info("getWrite("+id+")") ;
+        info("getWrite("+id+")") ;
         return blockMgr.getWrite(id) ;
     }
 
     @Override
     public Block promote(Block block)
     {
-        log.info("promote("+block.getId()+")") ;
+        info("promote("+block.getId()+")") ;
         return blockMgr.promote(block) ;
     }
 
     @Override
     public void release(Block block)
     {
-        log.info("release("+block.getId()+")") ;
+        info("release("+block.getId()+")") ;
         blockMgr.release(block) ;
     }
 
     @Override
     public void write(Block block)
     {
-        log.info("write("+block.getId()+")") ;
+        info("write("+block.getId()+")") ;
         blockMgr.write(block) ;
     }
 
     @Override
     public void free(Block block)
     {
-        log.info("freeBlock("+block.getId()+")") ;
+        info("freeBlock("+block.getId()+")") ;
         blockMgr.free(block) ;
     }
 
     @Override
     public boolean valid(int id)
     {
-        log.info("valid("+id+")") ;
+        info("valid("+id+")") ;
         return blockMgr.valid(id) ;
     }
 
     @Override
     public void close()
     {
-        log.info("close") ;
+        info("close") ;
         blockMgr.close() ;
     }
 
     @Override
     public boolean isClosed()
     {
-        log.info("isClosed") ;
+        info("isClosed") ;
         return blockMgr.isClosed() ;
     }
 
     @Override
     public void sync()
     {
-        log.info("Sync") ;
+        info("Sync") ;
         blockMgr.sync() ;
     }
 
     @Override
     public void beginIterator(Iterator<?> iter)
     {
-        log.info("> start iterator") ;
+        info("> start iterator") ;
         blockMgr.beginIterator(iter) ;
     }
     
     @Override
     public void endIterator(Iterator<?> iter)
     {
-        log.info("< end iterator") ;
+        info("< end iterator") ;
         blockMgr.endIterator(iter) ;
     }
     
     @Override
     public void beginRead()
     {
-        log.info("> start read") ;
+        info("> start read") ;
         blockMgr.beginRead() ;
     }
 
     @Override
     public void endRead()
     {
-        log.info("< finish read") ;
+        info("< finish read") ;
         blockMgr.endRead() ;
     }
 
     @Override
     public void beginUpdate()
     {
-        log.info("> start update") ;
+        info("> start update") ;
         blockMgr.beginUpdate() ;
     }
 
     @Override
     public void endUpdate()
     {
-        log.info("< finish update") ;
+        info("< finish update") ;
         blockMgr.endUpdate() ;
     }
+
+    private void info(String string)
+    {
+        if ( label != null )
+            string = label+": "+string ;
+        log.info(string) ; 
+    }
 }
 
 /*

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrSync.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrSync.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrSync.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrSync.java Fri Jun 17 16:20:14 2011
@@ -151,6 +151,13 @@ public class BlockMgrSync implements Blo
     {
         return blockMgr.isClosed() ;
     }
+
+    @Override
+    synchronized
+    public String getLabel()
+    {
+        return blockMgr.getLabel() ;
+    }
 }
 /*
  * (c) Copyright 2007, 2008, 2009 Hewlett-Packard Development Company, LP

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrTracker.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrTracker.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrTracker.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrTracker.java Fri Jun 17 16:20:14 2011
@@ -21,6 +21,7 @@ import com.hp.hpl.jena.tdb.TDBException 
 
 public class BlockMgrTracker /*extends BlockMgrWrapper*/ implements BlockMgr
 {
+    private static Logger loggerDefault = LoggerFactory.getLogger(BlockMgrTracker.class) ; 
     public static boolean verbose = false ;
 
     static enum Action { Alloc, Promote, GetRead, GetWrite, Write, Release, Free, IterRead, 
@@ -58,31 +59,35 @@ public class BlockMgrTracker /*extends B
     private int inIterator = 0 ;
     private boolean inUpdate = false ;
     private final Logger log ;
+    private final String label ;
     
-    public static BlockMgr track(String label, BlockMgr blkMgr)
+    public static BlockMgr track(BlockMgr blkMgr) { return track(blkMgr.getLabel(), blkMgr) ; }
+
+    private static BlockMgr track(String label, BlockMgr blkMgr)
     {
         return new BlockMgrTracker(label, blkMgr) ;
     }
 
-    public BlockMgrTracker(BlockMgr blockMgr)
-    {
-        this(LoggerFactory.getLogger(BlockMgrTracker.class), blockMgr) ;
-    }
-    
-    public BlockMgrTracker(String label, BlockMgr blockMgr)
+    private BlockMgrTracker(BlockMgr blockMgr)
     {
-        this(LoggerFactory.getLogger(label), blockMgr) ;
+        this(LoggerFactory.getLogger(BlockMgrTracker.class), blockMgr.getLabel(), blockMgr) ;
     }
     
-    public BlockMgrTracker(Class<?> label, BlockMgr blockMgr)
+    private BlockMgrTracker(String label, BlockMgr blockMgr)
     {
-        this(LoggerFactory.getLogger(label), blockMgr) ;
+        this(loggerDefault, label, blockMgr) ;
     }
+//    
+//    public BlockMgrTracker(Class<?> cls, String label, BlockMgr blockMgr)
+//    {
+//        this(LoggerFactory.getLogger(cls), label, blockMgr) ;
+//    }
     
-    public BlockMgrTracker(Logger logger, BlockMgr blockMgr)
+    public BlockMgrTracker(Logger logger, String label, BlockMgr blockMgr)
     {
         this.blockMgr = blockMgr ;
         this.log = logger ;
+        this.label = blockMgr.getLabel() ;
     }
 
     private void add(Action action, Long id) { actions.add(new Pair<Action, Long>(action, id)) ; }
@@ -183,9 +188,12 @@ public class BlockMgrTracker /*extends B
                 error(Release, id+" is not an active block") ;
 
             // May have been promoted.
-            activeReadBlocks.remove(block.getId()) ;
+            if ( activeWriteBlocks.contains(id) )
+                activeWriteBlocks.remove(id) ;
+            else
+                activeReadBlocks.remove(block.getId()) ;
+            
             activeIterBlocks.remove(block.getId()) ;
-            activeWriteBlocks.remove(block.getId()) ;
         }
         blockMgr.release(block) ;
     }
@@ -377,47 +385,76 @@ public class BlockMgrTracker /*extends B
     {
         if ( ! blocks.isEmpty() )
         {
-            log.error(string) ;
+            error(string) ;
             for ( Long id : blocks )
-                log.info("    Block: "+id) ;
+                info("    Block: "+id) ;
             history() ;
             throw new TDBException() ;
             //debugPoint() ;
         }
     }
     
+    private String msg(String string)
+    {
+        if ( label == null ) return string ;
+        return label+": "+string ;
+    }
+
+    private void info(String string)
+    {
+        log.info(msg(string)) ;
+    }
+
+    private void warn(String string)
+    {
+        log.warn(msg(string)) ;
+    }
+
+    private void warn(Action action, String string)
+    {
+        warn(action + ": " + string) ;
+    }
+   
+    private void error(String string)
+    {
+        log.error(msg(string)) ;
+    }
+
     private void error(Action action, String string)
     {
         if ( verbose )
         {
-            log.error(action+": "+string) ;
+            error(action+": "+string) ;
             history() ;
         }
-        throw new BlockException(action+": "+string) ;
+        throw new BlockException(msg(action+": "+string)) ;
         //debugPoint() ;
     }
 
     // Do nothing - but use a a breakpoint point.
     private void debugPoint() {}
 
-    private void warn(Action action, String string)
-    { log.warn(action+": "+string) ; }
-
     private void history()
     {
-        log.info("History") ;
+        info("History") ;
         for ( Pair<Action, Long> p : actions )
         {
             if ( p.getRight() != NoId )
-                log.info(String.format("    %-12s  %d", p.getLeft(), p.getRight())) ;
+                log.info(String.format("%s:     %-12s  %d", label, p.getLeft(), p.getRight())) ;
             else
-                log.info(String.format("    %-12s", p.getLeft())) ;
+                log.info(String.format("%s:     %-12s", label, p.getLeft())) ;
             
         }
     }
     
     @Override
-    public String toString() { return "BlockMgrTracker: "+log.getName() ; } 
+    public String toString() { return "BlockMgrTracker"+((label==null)?"":(": "+label)) ; }
+
+    @Override
+    public String getLabel()
+    {
+        return label ;
+    } 
 }
 
 /*

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrWrapper.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrWrapper.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrWrapper.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrWrapper.java Fri Jun 17 16:20:14 2011
@@ -132,6 +132,12 @@ public class BlockMgrWrapper implements 
     {
         blockMgr.endUpdate() ;
     }
+
+    @Override
+    public String getLabel()
+    {
+        return blockMgr.getLabel() ;
+    }
 }
 /*
  * (c) Copyright 2007, 2008, 2009 Hewlett-Packard Development Company, LP

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccess.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccess.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccess.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccess.java Fri Jun 17 16:20:14 2011
@@ -31,6 +31,8 @@ public interface BlockAccess extends Syn
     public boolean isEmpty() ; 
     
     public boolean valid(long id) ;
+
+    public String getLabel() ;
 }
 
 /*

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessBase.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessBase.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessBase.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessBase.java Fri Jun 17 16:20:14 2011
@@ -35,11 +35,10 @@ public abstract class BlockAccessBase im
 
     public BlockAccessBase(String filename, int blockSize)
     {
-        //super(filename) ;
         this.blockSize = blockSize ;
+        this.filename = filename ;
+        this.label = FileOps.basename(filename) ;
         try {
-            this.filename = filename ;
-            this.label = FileOps.basename(filename) ;
             // "rwd" - Syncs only the file contents
             // "rws" - Syncs the file contents and metadata
             // "rw" - cached?
@@ -155,6 +154,12 @@ public abstract class BlockAccessBase im
             { throw new BlockException(ex) ; }
         }
     }
+    
+    @Override
+    public String getLabel()
+    {
+        return label ;
+    }
 }
 
 /*

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessByteArray.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessByteArray.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessByteArray.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessByteArray.java Fri Jun 17 16:20:14 2011
@@ -19,15 +19,20 @@ public class BlockAccessByteArray implem
     private ByteBuffer bytes ;
     private long length ;           // Bytes in use: 0 to length-1 
     private long alloc ;            // Bytes allocated
+    private final String label ;
     
-    public BlockAccessByteArray()
+    public BlockAccessByteArray(String label)
     {
         bytes = ByteBuffer.allocate(1024) ;
         length = 0 ; 
         alloc = 0 ;
+        this.label = label ;
     }
     
     @Override
+    public String getLabel () { return label ; }
+    
+    @Override
     public Block allocate(int size)
     {
         long addr = alloc ;

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMem.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMem.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMem.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMem.java Fri Jun 17 16:20:14 2011
@@ -15,10 +15,12 @@ import java.util.List ;
 import com.hp.hpl.jena.tdb.base.block.Block ;
 import com.hp.hpl.jena.tdb.sys.SystemTDB ;
 
-/*
+/**
  * File access layer that simulates a disk in-memory - for testing, not written for efficiency.
  * There is a safe mode, whereby blocks are copied in and out to guarantee no writing to an unallocated block.
  * This is very inefficient but a better simulation of a disk.
+ * 
+ * @See BlockAccessByteArray
  */
 
 public class BlockAccessMem implements BlockAccess
@@ -29,15 +31,17 @@ public class BlockAccessMem implements B
     private List<Block> blocks = new ArrayList<Block>() ;
     private final boolean safeModeThisMgr ;
     protected final int blockSize ;
+    private final String label ;
     
-    public BlockAccessMem(int blockSize)
+    public BlockAccessMem(String label, int blockSize)
     {
-        this(blockSize, SafeMode) ;
+        this(label, blockSize, SafeMode) ;
     }
     
-    private BlockAccessMem(int blockSize, boolean b)
+    private BlockAccessMem(String label, int blockSize, boolean b)
     {
         this.blockSize = blockSize ;
+        this.label = label ;
         safeModeThisMgr = b ;
     }
 
@@ -121,6 +125,12 @@ public class BlockAccessMem implements B
         if ( bb.order() != SystemTDB.NetworkOrder )
             throw new FileException("BlockMgrMem: Wrong byte order") ;
     }
+
+    @Override
+    public String getLabel()
+    {
+        return label ;
+    }
 }
 /*
  * (c) Copyright 2011 Epimorphics Ltd.

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/index/bplustree/BPlusTree.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/index/bplustree/BPlusTree.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/index/bplustree/BPlusTree.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/index/bplustree/BPlusTree.java Fri Jun 17 16:20:14 2011
@@ -172,8 +172,11 @@ public class BPlusTree implements Iterab
     {
         BlockMgr mgr1 = bpTree.getNodeManager().getBlockMgr() ;
         BlockMgr mgr2 = bpTree.getRecordsMgr().getBlockMgr() ;
-        mgr1 = new BlockMgrTracker("BPT/Nodes", mgr1) ;
-        mgr2 = new BlockMgrTracker("BPT/Records", mgr2) ;
+//        mgr1 = BlockMgrTracker.track("BPT/Nodes", mgr1) ;
+//        mgr2 = BlockMgrTracker.track("BPT/Records", mgr2) ;
+        mgr1 = BlockMgrTracker.track(mgr1) ;
+        mgr2 = BlockMgrTracker.track(mgr2) ;
+
         return BPlusTree.attach(bpTree.getParams(), mgr1, mgr2) ;
     }
 
@@ -241,7 +244,10 @@ public class BPlusTree implements Iterab
     {
         // [TxTDB:PATCH-UP]
         if ( root != null ) 
-            root.release() ;
+        {
+            //root.release() ;
+            //nodeManager.release(rootNode) ;
+        }
         if ( root != null && rootNode != root )
             log.warn("Root is not root!") ;
     }
@@ -356,10 +362,9 @@ public class BPlusTree implements Iterab
         BPTreeNode root = getRoot() ;
         Iterator<Record> iter = iterator(root, fromRec, toRec) ;
         releaseRoot(root) ;
-        finishReadBlkMgr() ;    // WRONG!
-        
-        // Add a checkign wrapper via: 
-        // ConcurrencyPolicyMRSW
+        finishReadBlkMgr() ;
+        // Note that this end the read-part (find the start), not the iteration.
+        // Iterator read blocks still get handled.
         return 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=1136924&r1=1136923&r2=1136924&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 Fri Jun 17 16:20:14 2011
@@ -116,9 +116,7 @@ public class BlockMgrJournal implements 
         checkIfClosed() ;
         Block block = localBlock(id) ;
         if ( block != null )
-            return block ;
-        
-        block = blockMgr.getReadIterator(id) ;
+            block = blockMgr.getReadIterator(id) ;
         iteratorBlocks.add(block.getId()) ;
         return block ;
     }
@@ -167,7 +165,8 @@ public class BlockMgrJournal implements 
     {
         checkIfClosed() ;
         Long id = block.getId() ;
-        if ( readBlocks.contains(id) || iteratorBlocks.contains(id) )
+        // Only release unchanged blocks.
+        if ( ! writeBlocks.containsKey(id))
             blockMgr.release(block) ;
     }
 
@@ -179,7 +178,7 @@ public class BlockMgrJournal implements 
         {
             Log.warn(this, "Block not recognized: "+block.getId()) ;
             // Probably corruption by writing in-place.
-            // but at least when this trasnaction commits,
+            // but at least when this transaction commits,
             // the update data is written,
             writeBlocks.put(block.getId(), block) ;
         }
@@ -273,6 +272,12 @@ public class BlockMgrJournal implements 
         transaction.removeIterator(iterator) ;
         blockMgr.endIterator(iterator) ;
     }
+
+    @Override
+    public String toString() { return "Journal:"+blockMgr.toString() ; }
+
+    @Override
+    public String getLabel() { return fileRef.getFilename() ; }
 }
 
 /*

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=1136924&r1=1136923&r2=1136924&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 Fri Jun 17 16:20:14 2011
@@ -15,9 +15,11 @@ import setup.NodeTableBuilder ;
 import setup.ObjectFileBuilder ;
 import setup.RangeIndexBuilder ;
 import setup.TupleIndexBuilder ;
+import setup.DatasetBuilderStd.RangeIndexBuilderStd ;
 import tx.base.FileRef ;
 
 import com.hp.hpl.jena.tdb.base.block.BlockMgr ;
+import com.hp.hpl.jena.tdb.base.block.BlockMgrLogger ;
 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.BufferChannelMem ;
@@ -25,20 +27,45 @@ import com.hp.hpl.jena.tdb.base.file.Fil
 import com.hp.hpl.jena.tdb.base.file.FileSet ;
 import com.hp.hpl.jena.tdb.base.file.Location ;
 import com.hp.hpl.jena.tdb.base.objectfile.ObjectFile ;
+import com.hp.hpl.jena.tdb.base.record.RecordFactory ;
+import com.hp.hpl.jena.tdb.index.Index ;
 import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
 
 public class DatasetBuilderTxn extends DatasetBuilderStd
 {
     public DatasetBuilderTxn(TransactionManager txnMgr) { setStd() ; this.txnMgr = txnMgr ; }
     
+    // ---- Add tracking
+    static BlockMgrBuilder track(BlockMgrBuilder other) { return new BlockMgrBuilderLogger(other) ; }
+    
+    static class BlockMgrBuilderLogger implements BlockMgrBuilder
+    {
+        public BlockMgrBuilder other ;
+        public BlockMgrBuilderLogger(BlockMgrBuilder other)
+        { 
+            this.other = other ;
+        }
+        
+        @Override
+        public BlockMgr buildBlockMgr(FileSet fileSet, String ext, int blockSize)
+        {
+            BlockMgr blkMgr = other.buildBlockMgr(fileSet, ext, blockSize) ;
+            blkMgr = new BlockMgrLogger(blkMgr.getLabel(), blkMgr, true) ;
+            return blkMgr ;
+        }
+    }
+    // ----
+    
     @Override
     protected void setStd()
     {
         ObjectFileBuilder objectFileBuilder = new ObjectFileBuilderTx() ;
         BlockMgrBuilder blockMgrBuilder = new BlockMgrBuilderTx() ;
 
-        // These are the usual.
+        // Add track(...) to log.
         IndexBuilder indexBuilder = new IndexBuilderStd(blockMgrBuilder, blockMgrBuilder) ;
+        
+        //RangeIndexBuilder rangeIndexBuilder = new RangeIndexBuilderStd(blockMgrBuilder, track(blockMgrBuilder)) ;
         RangeIndexBuilder rangeIndexBuilder = new RangeIndexBuilderStd(blockMgrBuilder, blockMgrBuilder) ;
 
         NodeTableBuilder nodeTableBuilder = new NodeTableBuilderStd(indexBuilder, objectFileBuilder) ;

Modified: incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/file/TestBlockAccessByteArray.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/file/TestBlockAccessByteArray.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/file/TestBlockAccessByteArray.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/file/TestBlockAccessByteArray.java Fri Jun 17 16:20:14 2011
@@ -12,7 +12,7 @@ public class TestBlockAccessByteArray ex
     @Override
     protected BlockAccess make()
     {
-        return new BlockAccessByteArray() ;
+        return new BlockAccessByteArray("test") ;
     }
 
 }

Modified: incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/file/TestBlockAccessMem.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/file/TestBlockAccessMem.java?rev=1136924&r1=1136923&r2=1136924&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/file/TestBlockAccessMem.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/base/file/TestBlockAccessMem.java Fri Jun 17 16:20:14 2011
@@ -17,7 +17,7 @@ public class TestBlockAccessMem extends 
     @Override
     protected BlockAccess make()
     {
-        return new BlockAccessMem(BlockSize) ;
+        return new BlockAccessMem("test", BlockSize) ;
     }
 
 }