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)