You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/07/04 13:50:48 UTC

svn commit: r1142633 - in /incubator/jena/Experimental/TxTDB/trunk: 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/sys/ src/main/java/com/hp/hpl/jena/tdb/transact...

Author: andy
Date: Mon Jul  4 11:50:47 2011
New Revision: 1142633

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

Modified:
    incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Replay.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/BlockMgrCache.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/BlockAccessByteArray.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessDirect.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMapped.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/sys/SetupTDB.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/BlockMgrJournal.java

Modified: incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Replay.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Replay.java?rev=1142633&r1=1142632&r2=1142633&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Replay.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Replay.java Mon Jul  4 11:50:47 2011
@@ -9,6 +9,7 @@ package tx;
 import java.nio.ByteBuffer ;
 import java.util.Map ;
 
+import org.openjena.atlas.lib.ByteBufferLib ;
 import org.slf4j.Logger ;
 import org.slf4j.LoggerFactory ;
 
@@ -65,8 +66,19 @@ public class Replay
         switch (e.getType())
         {
             case Block:
+                // All-purpose, works for direct and mapped mode, copy of a block.
+                // [TxTDB:PATCH-UP]
+                // Direct: blkMgr.write(e.getBlock()) would work.
+                // Mapped: need to copy over the bytes.
+                
                 BlockMgr blkMgr = mgrs.get(e.getFileRef()) ;
-                blkMgr.write(e.getBlock()) ; 
+                Block blk = e.getBlock() ;
+                blkMgr.overwrite(blk) ; 
+                
+//                Block blk = blkMgr.getWrite(e.getBlock().getId()) ;
+//                blk.getByteBuffer().rewind() ;
+//                blk.getByteBuffer().put(e.getBlock().getByteBuffer()) ;
+//                blkMgr.write(e.getBlock()) ; 
                 return true ;
             case Commit:
                 return false ;

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=1142633&r1=1142632&r2=1142633&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java Mon Jul  4 11:50:47 2011
@@ -10,6 +10,7 @@ import org.openjena.atlas.lib.Bytes ;
 import org.openjena.atlas.lib.FileOps ;
 import org.openjena.atlas.logging.Log ;
 
+import com.hp.hpl.jena.graph.Graph ;
 import com.hp.hpl.jena.graph.Node ;
 import com.hp.hpl.jena.graph.Triple ;
 import com.hp.hpl.jena.query.DatasetFactory ;
@@ -30,20 +31,16 @@ import com.hp.hpl.jena.tdb.base.block.Fi
 import com.hp.hpl.jena.tdb.base.file.BufferChannel ;
 import com.hp.hpl.jena.tdb.base.file.BufferChannelFile ;
 import com.hp.hpl.jena.tdb.base.file.FileFactory ;
-import com.hp.hpl.jena.tdb.base.file.FileSet ;
 import com.hp.hpl.jena.tdb.base.objectfile.ObjectFile ;
 import com.hp.hpl.jena.tdb.base.record.Record ;
 import com.hp.hpl.jena.tdb.base.record.RecordFactory ;
 import com.hp.hpl.jena.tdb.index.Index ;
 import com.hp.hpl.jena.tdb.index.IndexMap ;
-import com.hp.hpl.jena.tdb.index.RangeIndex ;
-import com.hp.hpl.jena.tdb.index.bplustree.BPlusTreeParams ;
 import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
 import com.hp.hpl.jena.tdb.nodetable.NodeTableInline ;
 import com.hp.hpl.jena.tdb.setup.DatasetBuilderStd ;
 import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
 import com.hp.hpl.jena.tdb.store.NodeId ;
-import com.hp.hpl.jena.tdb.sys.SetupTDB ;
 import com.hp.hpl.jena.tdb.sys.SystemTDB ;
 import com.hp.hpl.jena.tdb.transaction.DatasetGraphTxnTDB ;
 import com.hp.hpl.jena.tdb.transaction.Journal ;
@@ -79,27 +76,23 @@ public class TxMain
         // next: write block id to Journal 
         // Next: API, transactions, and rollback.
         
-        SystemTDB.setFileMode(FileMode.direct) ;
-        //SystemTDB.setFileMode(FileMode.mapped) ;
+        //SystemTDB.setFileMode(FileMode.direct) ;
+        SystemTDB.setFileMode(FileMode.mapped) ;
         
         initFS() ;
         
-        int order = BPlusTreeParams.calcOrder(SystemTDB.BlockSize, new RecordFactory(24, 0)) ;
-        RangeIndex rIdx = SetupTDB.createBPTree(new FileSet("DB/tree"), order, SystemTDB.BlockSize,
-                              100, 100, new RecordFactory(24, 0)) ;
-        // Necessary ... shouldn't be.
-        //rIdx.sync() ;
-        
-        for ( Record r : rIdx )
-        {
-            System.out.println(r) ;
-        }
-        exit(0) ;
+//        RangeIndex rIdx = SetupTDB.createBPTree(new FileSet("DB/tree"), new RecordFactory(24, 0)) ;
+//        
+//        for ( Record r : rIdx )
+//        {
+//            System.out.println(r) ;
+//        }
+//        exit(0) ;
         
         
         DatasetGraphTDB dsg0 = build() ;
         dsg0.sync() ;
-        query("SELECT (Count(*) AS ?c) { ?s ?p ?o }", dsg0) ;
+        query("SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
         //exit(0) ;
         
         TransactionManager txnMgr = new TransactionManager() ;
@@ -107,18 +100,19 @@ public class TxMain
         DatasetGraphTxnTDB dsg1 = txnMgr.begin(dsg0) ;
         
         load("D.ttl", dsg1) ;
-        query("SELECT (Count(*) AS ?c) { ?s ?p ?o }", dsg1) ;
-        query("SELECT (Count(*) AS ?c) { ?s ?p ?o }", dsg0) ;
+        query("SELECT (Count(*) AS ?c1) { ?s ?p ?o }", dsg1) ;
+        query("SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
         
         dsg1.commit() ;
         
-        
         System.out.println("Replay") ;
         BufferChannel bc = new BufferChannelFile(DBdir+"/journal.jrnl") ;
         Journal j = new Journal(bc) ;
         //Replay.print(j) ;
         Replay.replay(j, dsg0) ;
-        query("SELECT (Count(*) AS ?c) { ?s ?p ?o }", dsg0) ;
+        query("SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
+        query("SELECT * { ?s ?p ?o }", dsg0) ;
+        write(dsg0.getDefaultGraph(), "TTL") ;
         
         exit(0) ;
         
@@ -151,6 +145,12 @@ public class TxMain
         exit(0) ;
     }
     
+    private static void write(Graph graph, String lang)
+    {
+        Model model = ModelFactory.createModelForGraph(graph) ;
+        model.write(System.out, lang) ; 
+    }
+
     private static void execNT()
     {
         String dir = "DB" ;

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=1142633&r1=1142632&r2=1142633&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 Mon Jul  4 11:50:47 2011
@@ -38,10 +38,17 @@ public interface BlockMgr extends Sync, 
     /** Promote to writeable : it's OK to promote an already writeable block */ 
     public Block promote(Block block);
 
-    /** Write a block back - it stil needs releasing. */ 
+    // Bad name?  "endWrite", "put" -- for a mapped block, the changes are made directly, not on the write() */   
+    /** Write a block back - it still needs releasing. */ 
     public void write(Block block) ;
-
-    /** Announce a block is no longer in use (i.e it's now freed) */ 
+    
+    /** Replace the contents of a block slot with new contents. Block does not need releasing.
+     * The write() operation may not do real work if the block is mapped - this operation
+     * really does replace the contents with the new contents.  
+     */ 
+    public void overwrite(Block blk) ;
+    
+   /** Announce a block is no longer in use (i.e it's now freed) */ 
     public void free(Block block);
   
     /** Is this a valid block id? (may be a free block)*/
@@ -79,7 +86,7 @@ public interface BlockMgr extends Sync, 
     /** Completion of iterator */
     public void endIterator(Iterator<?> iterator) ;
 
-    /* Label for hleping trace which BlockMgr is which */
+    /* Label for helping trace which BlockMgr is which */
     public String getLabel() ;
 }
 

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrCache.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrCache.java?rev=1142633&r1=1142632&r2=1142633&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrCache.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/block/BlockMgrCache.java Mon Jul  4 11:50:47 2011
@@ -118,6 +118,15 @@ public class BlockMgrCache extends Block
         readCache.put(id, blk) ;
         return blk ;
     }
+    
+    @Override
+    synchronized
+    public Block getReadIterator(long id)
+    {
+        // And don't pass down "iterator" calls.
+        return getRead(id) ; 
+    }
+
 
     @Override
     synchronized
@@ -139,6 +148,7 @@ public class BlockMgrCache extends Block
         
         if ( readCache.containsKey(id) )
         {
+            blk = readCache.get(id) ;
             cacheReadHits++ ;
             log("Hit(w->r) : %d", id) ;
             blk = promote(blk) ;
@@ -170,8 +180,22 @@ public class BlockMgrCache extends Block
     synchronized
     public void write(Block block)
     {
+        writeCache(block) ;
+        super.write(block) ;
+    }
+    
+    @Override
+    synchronized
+    public void overwrite(Block block)
+    {
+        writeCache(block) ;
+        super.overwrite(block) ;
+    }
+    
+    private void writeCache(Block block)
+    {
         Long id = block.getId() ;
-        log("Put   : %d", id) ;
+        log("Overwrite : %d", id) ;
         // Should not be in the read cache due to a getWrite earlier.
         if ( readCache.containsKey(id) )
             log.error("write: Block in the read cache") ;
@@ -180,7 +204,6 @@ public class BlockMgrCache extends Block
             writeCache.put(id, block) ;
             return ;
         }
-        super.write(block) ;
     }
     
     @Override
@@ -236,7 +259,7 @@ public class BlockMgrCache extends Block
     @Override
     public String toString()
     {
-        return "Cache:"+super.toString() ; 
+        return "Cache:"+super.blockMgr.toString() ; 
     }
     
 

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=1142633&r1=1142632&r2=1142633&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 Mon Jul  4 11:50:47 2011
@@ -81,6 +81,13 @@ public class BlockMgrFileAccess extends 
     }
 
     @Override
+    public void overwrite(Block block)
+    {
+        file.overwrite(block) ;
+    }
+
+
+    @Override
     public void free(Block block)
     {
         // We do nothing about free blocks currently.

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=1142633&r1=1142632&r2=1142633&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 Mon Jul  4 11:50:47 2011
@@ -100,6 +100,13 @@ public class BlockMgrLogger implements B
     }
 
     @Override
+    public void overwrite(Block block)
+    {
+        info("overwrite("+block.getId()+")") ;
+        blockMgr.overwrite(block) ;
+    }
+
+    @Override
     public void free(Block block)
     {
         info("freeBlock("+block.getId()+")") ;

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=1142633&r1=1142632&r2=1142633&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 Mon Jul  4 11:50:47 2011
@@ -42,7 +42,6 @@ public class BlockMgrSync implements Blo
         return blockMgr.getReadIterator(id) ;
     }
 
-
     @Override
     synchronized
     public Block getWrite(long id)
@@ -70,6 +69,13 @@ public class BlockMgrSync implements Blo
     {
         blockMgr.write(block) ;
     }
+    
+    @Override
+    synchronized
+    public void overwrite(Block block)
+    {
+        blockMgr.overwrite(block) ;
+    }
 
     @Override
     synchronized

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=1142633&r1=1142632&r2=1142633&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 Mon Jul  4 11:50:47 2011
@@ -201,6 +201,20 @@ public class BlockMgrTracker /*extends B
     @Override
     public void write(Block block)
     {
+        writeTracker(block) ;
+        blockMgr.write(block) ;
+    }
+    
+    @Override
+    synchronized
+    public void overwrite(Block block)
+    {
+        writeTracker(block) ;
+        blockMgr.overwrite(block) ;
+    }
+    
+    private void writeTracker(Block block)
+    {
         synchronized (this)
         {
             checkUpdate(Write) ;
@@ -209,7 +223,6 @@ public class BlockMgrTracker /*extends B
             if ( ! activeWriteBlocks.contains(id) )
                 error(Write, id+ " is not an active write block") ;
         }
-        blockMgr.write(block) ;
     }
 
     @Override

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=1142633&r1=1142632&r2=1142633&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 Mon Jul  4 11:50:47 2011
@@ -71,6 +71,12 @@ public class BlockMgrWrapper implements 
     }
 
     @Override
+    public void overwrite(Block block)
+    {
+        blockMgr.overwrite(block) ;
+    }
+
+    @Override
     public void free(Block block)
     {
         blockMgr.free(block) ;

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=1142633&r1=1142632&r2=1142633&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 Mon Jul  4 11:50:47 2011
@@ -28,6 +28,8 @@ public interface BlockAccess extends Syn
     
     public void write(Block block) ;
     
+    public void overwrite(Block block) ;
+    
     public boolean isEmpty() ; 
     
     public boolean valid(long id) ;

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=1142633&r1=1142632&r2=1142633&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 Mon Jul  4 11:50:47 2011
@@ -83,6 +83,12 @@ public class BlockAccessByteArray implem
         bytes.putInt(len) ;
         bytes.put(bb.array(), 0, bb.capacity()) ;
     }
+    
+    @Override
+    public void overwrite(Block block)
+    {
+        write(block) ;
+    }    
 
     @Override
     public boolean isEmpty()

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessDirect.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessDirect.java?rev=1142633&r1=1142632&r2=1142633&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessDirect.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessDirect.java Mon Jul  4 11:50:47 2011
@@ -48,6 +48,7 @@ public class BlockAccessDirect extends B
         checkIfClosed() ;
         ByteBuffer bb = ByteBuffer.allocate(blockSize) ;
         readByteBuffer(id, bb) ;
+        bb.rewind() ;
         Block block = new Block(id, bb) ;
         return block ;
     }
@@ -73,16 +74,24 @@ public class BlockAccessDirect extends B
         check(block) ;
         checkIfClosed() ;
         ByteBuffer bb = block.getByteBuffer() ;
-        bb.position(0) ;
-        bb.limit(bb.capacity()) ;
+        // This .clear() except the javadoc suggests this is not the correct use of .clear()
+        // and the name does 
+        bb.limit(bb.capacity()) ;   // It shouldn't have been changed.
+        bb.rewind() ;
         try {
             int len = channel.write(bb, filePosition(block.getId())) ;
             if ( len != blockSize )
-                throw new FileException(format("put: short write (%d, not %d)", len, blockSize)) ;   
+                throw new FileException(format("write: short write (%d, not %d)", len, blockSize)) ;   
         } catch (IOException ex)
         { throw new FileException("FileAccessDirect", ex) ; }
         writeNotification(block) ;
     }
+    
+    @Override
+    public void overwrite(Block block)
+    {
+        write(block) ;
+    }
 
     @Override
     public void sync()

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMapped.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMapped.java?rev=1142633&r1=1142632&r2=1142633&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMapped.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/BlockAccessMapped.java Mon Jul  4 11:50:47 2011
@@ -33,7 +33,8 @@ public class BlockAccessMapped extends B
      */
     
     private static Logger log = LoggerFactory.getLogger(BlockAccessMapped.class) ;
-
+    private enum CopyContents { Overwrite, NoCopy } 
+    
     // Segmentation avoids over-mapping; allows file to grow (in chunks) 
     private final int GrowthFactor = 2 ;
     private final int SegmentSize = SystemTDB.SegmentSize ;
@@ -89,16 +90,35 @@ public class BlockAccessMapped extends B
     @Override
     public void write(Block block)
     {
+        write(block, CopyContents.NoCopy) ;
+    }
+    
+    @Override
+    public void overwrite(Block block)
+    {
+        write(block, CopyContents.Overwrite) ;
+    }
+
+    private void write(Block block, CopyContents copyContents)
+    {
         check(block) ;
         checkIfClosed() ;
-        int id = block.getId().intValue() ; // check() ensures it's an int.
+        int id = block.getId().intValue() ;
+        
+        if ( copyContents == CopyContents.Overwrite )
+        {
+            ByteBuffer bbDst = getByteBuffer(id) ;
+            bbDst.position(0) ;
+            ByteBuffer bbSrc = block.getByteBuffer() ;
+            bbSrc.rewind() ;
+            bbDst.put(bbSrc) ;
+        }
+        
         // Assumed MRSW - no need to sync as we are the only Writer
         segmentDirty[segment(id)] = true ;
-        // No other work.
         writeNotification(block) ;
     }
-
-
+    
     @Override
     public void sync()
     {

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=1142633&r1=1142632&r2=1142633&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 Mon Jul  4 11:50:47 2011
@@ -80,6 +80,12 @@ public class BlockAccessMem implements B
     }
     
     @Override
+    public void overwrite(Block block)
+    {
+        write(block) ;
+    }
+    
+    @Override
     public boolean isEmpty()
     {
         return blocks.isEmpty() ;

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/SetupTDB.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/SetupTDB.java?rev=1142633&r1=1142632&r2=1142633&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/SetupTDB.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/SetupTDB.java Mon Jul  4 11:50:47 2011
@@ -689,10 +689,45 @@ public class SetupTDB
 //        // Block size control?
 //        return chooseIndexBuilder(fileset).newRangeIndex(fileset, recordFactory) ;
 //    }
+    
+    /** Create a B+Tree using defaults */
+    public static RangeIndex createBPTree(FileSet fileset,
+                                          RecordFactory factory)
+    {
+        int readCacheSize = SystemTDB.BlockReadCacheSize ;
+        int writeCacheSize = SystemTDB.BlockWriteCacheSize ;
+        int blockSize = SystemTDB.BlockSize ;
+        if ( fileset.isMem() )
+        {
+            readCacheSize = 0 ;
+            writeCacheSize = 0 ;
+            blockSize = SystemTDB.BlockSizeTest ;
+        }
+        
+        return createBPTreeByBlockSize(fileset, blockSize, readCacheSize, writeCacheSize, factory) ; 
+    }
+    
+    /** Create a B+Tree by BlockSize */
+    public static RangeIndex createBPTreeByBlockSize(FileSet fileset,
+                                                     int blockSize,
+                                                     int readCacheSize, int writeCacheSize,
+                                                     RecordFactory factory)
+    {
+        return createBPTree(fileset, -1, blockSize, readCacheSize, writeCacheSize, factory) ; 
+    }
+    
+    /** Create a B+Tree by Order */
+    public static RangeIndex createBPTreeByOrder(FileSet fileset,
+                                                 int order,
+                                                 int readCacheSize, int writeCacheSize,
+                                                 RecordFactory factory)
+    {
+        return createBPTree(fileset, order, -1, readCacheSize, writeCacheSize, factory) ; 
+    }
+    
 
     /** Knowing all the parameters, create a B+Tree */
-    public static RangeIndex createBPTree(FileSet fileset, int order, 
-                                          int blockSize,
+    public static RangeIndex createBPTree(FileSet fileset, int order, int blockSize,
                                           int readCacheSize, int writeCacheSize,
                                           RecordFactory factory)
     {

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=1142633&r1=1142632&r2=1142633&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 Mon Jul  4 11:50:47 2011
@@ -190,6 +190,12 @@ public class BlockMgrJournal implements 
             writeBlocks.put(block.getId(), block) ;
         }
     }
+    
+    @Override
+    public void overwrite(Block block)
+    {
+        write(block) ;
+    }
 
     @Override
     public void free(Block block)