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/01 22:39:48 UTC
svn commit: r1142086 - in /incubator/jena/Experimental/TxTDB/trunk:
src-dev/tx/ src/main/java/com/hp/hpl/jena/tdb/store/
src/main/java/com/hp/hpl/jena/tdb/transaction/
src/test/java/com/hp/hpl/jena/tdb/transaction/
Author: andy
Date: Fri Jul 1 20:39:47 2011
New Revision: 1142086
URL: http://svn.apache.org/viewvc?rev=1142086&view=rev
Log: (empty)
Removed:
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetBuilderTxn_Old.java
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/store/DatasetGraphTDB.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/BlockMgrJournal.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetBuilderTxn.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetGraphTxnTDB.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Journal.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalEntry.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalEntryType.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java
incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/TestJournal.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=1142086&r1=1142085&r2=1142086&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Replay.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/Replay.java Fri Jul 1 20:39:47 2011
@@ -5,48 +5,53 @@
*/
package tx;
-//import static tx.journal.JournalEntryType.* ;
import java.nio.ByteBuffer ;
+import com.hp.hpl.jena.tdb.base.block.Block ;
import com.hp.hpl.jena.tdb.transaction.Journal ;
import com.hp.hpl.jena.tdb.transaction.JournalEntry ;
-
public class Replay
{
- public static void reply(Journal journal)
+ public static void print(Journal journal)
{
for ( JournalEntry e : journal )
{
-
+ System.out.println("Entry: ") ;
ByteBuffer bb = e.getByteBuffer() ;
-
- e.getFileRef() ;
-
- switch (e.getType())
- {
- case Block:
- // Get block ref.
- // Find block mgr
- // do it.
- break ;
- case Object:
- // Get id
- // get bytes
- // dispatch to NodeTable.
- // ?? Node rebuilding?
- // Check ids.
- break ;
- case Commit:
- break ;
- case Abort:
- break ;
- case Checkpoint:
- //default:
- }
+ Block blk = e.getBlock() ;
+ if ( bb != null )
+ System.out.println(" "+bb) ;
+ if ( blk != null )
+ System.out.println(" "+blk) ;
+ System.out.println(" "+e.getFileRef()) ;
+ System.out.println(" "+e.getType()) ;
}
}
+// switch (e.getType())
+// {
+// case Block:
+// // Get block ref.
+// // Find block mgr
+// // do it.
+// break ;
+// case Object:
+// // Get id
+// // get bytes
+// // dispatch to NodeTable.
+// // ?? Node rebuilding?
+// // Check ids.
+// break ;
+// case Commit:
+// break ;
+// case Abort:
+// break ;
+// case Checkpoint:
+// //default:
+// }
+// }
+// }
}
/*
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=1142086&r1=1142085&r2=1142086&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java Fri Jul 1 20:39:47 2011
@@ -28,6 +28,8 @@ import com.hp.hpl.jena.sparql.util.NodeF
import com.hp.hpl.jena.sparql.util.QueryExecUtils ;
import com.hp.hpl.jena.tdb.TDBFactory ;
import com.hp.hpl.jena.tdb.base.block.FileMode ;
+import com.hp.hpl.jena.tdb.base.file.BufferChannel ;
+import com.hp.hpl.jena.tdb.base.file.BufferChannelFile ;
import com.hp.hpl.jena.tdb.base.file.FileFactory ;
import com.hp.hpl.jena.tdb.base.objectfile.ObjectFile ;
import com.hp.hpl.jena.tdb.base.record.Record ;
@@ -43,8 +45,8 @@ import com.hp.hpl.jena.tdb.store.Dataset
import com.hp.hpl.jena.tdb.store.DatasetPrefixesTDB ;
import com.hp.hpl.jena.tdb.store.NodeId ;
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 ;
import com.hp.hpl.jena.tdb.transaction.NodeTableTrans ;
import com.hp.hpl.jena.tdb.transaction.TransactionManager ;
import com.hp.hpl.jena.update.UpdateAction ;
@@ -74,6 +76,9 @@ public class TxMain
public static void main(String... args)
{
+ // next: write block id to Journal
+ // Next: API, transactions, and rollback.
+
if ( false )
SystemTDB.setFileMode(FileMode.direct) ;
@@ -81,11 +86,20 @@ public class TxMain
DatasetGraphTDB dsg0 = build() ;
query("SELECT (Count(*) AS ?c) { ?s ?p ?o }", dsg0) ;
- DatasetGraphTDB dsg1 = new DatasetBuilderTxn(new TransactionManager()).build(dsg0) ;
+ TransactionManager txnMgr = new TransactionManager() ;
+
+ 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) ;
+ dsg1.commit() ;
+
+ BufferChannel bc = new BufferChannelFile(DBdir+"/journal.jrnl") ;
+ Journal j = new Journal(bc) ;
+ Replay.print(j) ;
+
exit(0) ;
deconstruct(dsg0) ;
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java?rev=1142086&r1=1142085&r2=1142086&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java Fri Jul 1 20:39:47 2011
@@ -8,7 +8,6 @@ package com.hp.hpl.jena.tdb.store;
import java.util.Iterator ;
-import java.util.Properties ;
import org.openjena.atlas.iterator.Iter ;
import org.openjena.atlas.iterator.Transform ;
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=1142086&r1=1142085&r2=1142086&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 Jul 1 20:39:47 2011
@@ -13,7 +13,6 @@ import java.util.Iterator ;
import java.util.Map ;
import java.util.Set ;
-import org.openjena.atlas.lib.NotImplemented ;
import org.openjena.atlas.logging.Log ;
import com.hp.hpl.jena.tdb.base.block.Block ;
@@ -49,7 +48,8 @@ public class BlockMgrJournal implements
@Override
public void commit(Transaction txn)
{
- throw new NotImplemented("yet") ;
+ for ( Block blk : writeBlocks.values() )
+ writeJournalEntry(blk) ;
}
@Override
@@ -246,15 +246,11 @@ public class BlockMgrJournal implements
{
checkIfClosed() ;
blockMgr.endRead() ;
- for ( Block blk : writeBlocks.values() )
- writeJournalEntry(blk) ;
}
private void writeJournalEntry(Block blk)
{
- // Space for BlockRef.
- // [TxTDB:TODO] Space for BlockRef.
- JournalEntry entry = new JournalEntry(JournalEntryType.Block, fileRef, blk.getByteBuffer()) ;
+ JournalEntry entry = new JournalEntry(fileRef, blk) ;
journal.writeJournal(entry) ;
}
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=1142086&r1=1142085&r2=1142086&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 Jul 1 20:39:47 2011
@@ -52,14 +52,15 @@ public class DatasetBuilderTxn
else
chan = new BufferChannelFile(dsg.getLocation().absolute(Names.journalFile)) ;
journal = new Journal(chan) ;
+ txn.set(journal) ;
BlockMgrBuilder blockMgrBuilder = new BlockMgrBuilderTx() ;
NodeTableBuilder nodeTableBuilder = new NodeTableBuilderTx() ;
- // [TxTDB:PATCH-UP] FAKE BEGIN
-
DatasetBuilderStd x = new DatasetBuilderStd(blockMgrBuilder, nodeTableBuilder) ;
- return x.build(dsg.getLocation(), dsg.getConfig().properties) ;
+ DatasetGraphTDB dsg2 = x.build(dsg.getLocation(), dsg.getConfig().properties) ;
+ return new DatasetGraphTxnTDB(dsg2, txn) ;
+
}
@@ -104,7 +105,7 @@ public class DatasetBuilderTxn
objectFile = FileFactory.createObjectFileDisk(objFilename) ;
NodeTableTrans ntt = new NodeTableTrans(ntBase, idx, objectFile) ;
- ntt.begin(txn) ; // [TxTDB:PATCH-UP] FAKE BEGIN
+ txn.add(ntt) ;
// Add inline wrapper.
NodeTable nt = NodeTableInline.create(ntt) ;
@@ -122,8 +123,9 @@ public class DatasetBuilderTxn
BlockMgr baseMgr = blockMgrs.get(ref) ;
if ( baseMgr == null )
throw new TDBException("No BlockMgr for "+ref) ;
- BlockMgrJournal blkMg = new BlockMgrJournal(txn, ref, baseMgr, journal) ;
- return blkMg ;
+ BlockMgrJournal blkMgr = new BlockMgrJournal(txn, ref, baseMgr, journal) ;
+ txn.add(blkMgr) ;
+ return blkMgr ;
}
}
}
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetGraphTxnTDB.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetGraphTxnTDB.java?rev=1142086&r1=1142085&r2=1142086&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetGraphTxnTDB.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetGraphTxnTDB.java Fri Jul 1 20:39:47 2011
@@ -18,6 +18,8 @@ public class DatasetGraphTxnTDB extends
this.transaction = txn ;
}
+ public Transaction getTransaction() { return transaction ; }
+
public void commit() { transaction.commit() ; }
public void abort() { transaction.abort() ; }
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Journal.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Journal.java?rev=1142086&r1=1142085&r2=1142086&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Journal.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Journal.java Fri Jul 1 20:39:47 2011
@@ -7,7 +7,7 @@
package com.hp.hpl.jena.tdb.transaction;
import static com.hp.hpl.jena.tdb.sys.SystemTDB.SizeOfInt ;
-
+import static com.hp.hpl.jena.tdb.transaction.JournalEntryType.* ;
import java.nio.ByteBuffer ;
import java.util.Iterator ;
@@ -16,6 +16,7 @@ import org.openjena.atlas.lib.Closeable
import org.openjena.atlas.lib.Sync ;
+import com.hp.hpl.jena.tdb.base.block.Block ;
import com.hp.hpl.jena.tdb.base.file.BufferChannel ;
import com.hp.hpl.jena.tdb.sys.FileRef ;
@@ -37,12 +38,14 @@ class Journal implements Iterable<Journa
BufferChannel channel ;
private long position ;
- // Length, type, fileRef.
+ // Length, type, fileRef, [block id]
// Length is length of variable part.
- public static int Overhead = 3*SizeOfInt ;
+ public static int Overhead = 4*SizeOfInt ;
+ public static final int NoId = 5 ;
- byte[] buffer = new byte[Overhead] ;
- ByteBuffer header = ByteBuffer.wrap(buffer) ;
+// byte[] _buffer = new byte[Overhead] ;
+// ByteBuffer header = ByteBuffer.wrap(_buffer) ;
+ ByteBuffer header = ByteBuffer.allocate(Overhead) ;
public Journal(BufferChannel channel)
{
@@ -53,24 +56,38 @@ class Journal implements Iterable<Journa
synchronized
public long writeJournal(JournalEntry entry)
{
- return _write(entry.getType(), entry.getFileRef(), entry.getByteBuffer()) ;
+ return _write(entry.getType(), entry.getFileRef(), entry.getByteBuffer(), entry.getBlock()) ;
}
synchronized
public long writeJournal(JournalEntryType type, FileRef fileRef, ByteBuffer buffer)
{
- return _write(type, fileRef, buffer) ;
+ return _write(type, fileRef, buffer, null) ;
+ }
+
+ synchronized
+ public long writeJournal(FileRef fileRef, Block block)
+ {
+ return _write(Block, fileRef, null, block) ;
}
synchronized
- private long _write(JournalEntryType type, FileRef fileRef, ByteBuffer buffer)
+ private long _write(JournalEntryType type, FileRef fileRef, ByteBuffer buffer, Block block)
{
- // FileRefs: one int.
+ if ( buffer != null && block != null )
+ throw new TDBTransactionException("Buffer and block to write") ;
+ if ( block != null )
+ buffer = block.getByteBuffer() ;
+
+ if ( block != null && type != Block )
+ throw new TDBTransactionException("Block to write but not block type") ;
long posn = position ;
int len = 0 ;
// [TxDEV:TODO] CRC
+ // [TxDEV:TODO] compress
+
if ( buffer != null )
len = buffer.remaining() ;
@@ -78,12 +95,18 @@ class Journal implements Iterable<Journa
header.putInt(type.id) ;
header.putInt(len) ;
header.putInt(fileRef.getId()) ;
+ int blkId = (block==null) ? NoId : block.getId().intValue() ;
+ header.putInt(blkId) ;
header.flip() ;
-
channel.write(header) ;
+
if ( len > 0 )
+ {
+ int x = buffer.position() ;
// Write bytes
channel.write(buffer) ;
+ buffer.position(x) ;
+ }
position += len+Overhead ;
return posn ;
@@ -103,18 +126,30 @@ class Journal implements Iterable<Journa
// Move position to end of read.
private JournalEntry _read()
{
+ // UGLY Maybe better to leave some space in the block's byte buffer.
// [TxTDB:TODO] Make robust against partial read.
header.clear() ;
channel.read(header) ;
header.rewind() ;
- int typeId = header.getInt() ;
- int len = header.getInt() ;
- int ref = header.getInt() ;
+ int typeId = header.getInt() ;
+ int len = header.getInt() ;
+ int ref = header.getInt() ;
+ int blockId = header.getInt() ;
+
+ JournalEntryType type = JournalEntryType.type(typeId) ;
FileRef fileRef = FileRef.get(ref) ;
ByteBuffer bb = ByteBuffer.allocate(len) ;
+ Block block = null ;
channel.read(bb) ;
- JournalEntryType type = JournalEntryType.type(typeId) ;
- return new JournalEntry(type, fileRef, bb) ;
+ bb.rewind() ;
+ if ( type == Block )
+ {
+ block = new Block(blockId, bb) ;
+ bb = null ;
+ }
+ else
+ blockId = NoId ;
+ return new JournalEntry(type, fileRef, bb, block) ;
}
/** Iterator of entries from current point in Journal, going forward. Must be JournalEntry aligned at start. */
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalEntry.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalEntry.java?rev=1142086&r1=1142085&r2=1142086&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalEntry.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalEntry.java Fri Jul 1 20:39:47 2011
@@ -8,6 +8,7 @@ package com.hp.hpl.jena.tdb.transaction;
import java.nio.ByteBuffer ;
+import com.hp.hpl.jena.tdb.base.block.Block ;
import com.hp.hpl.jena.tdb.sys.FileRef ;
@@ -16,26 +17,42 @@ public class JournalEntry
static public final JournalEntry Commit = new JournalEntry(JournalEntryType.Commit) ;
static public final JournalEntry Abort = new JournalEntry(JournalEntryType.Abort) ;
static public final JournalEntry CheckPoint = new JournalEntry(JournalEntryType.Checkpoint) ;
- private final JournalEntryType type ;
+
+ private final JournalEntryType type ; // One or other must be null - or both.
private final ByteBuffer byteBuffer ;
+ private final Block block ;
+ private final int id = -98 ;
private final FileRef fileRef ;
private JournalEntry(JournalEntryType type)
{
- this.type = type ;
- this.byteBuffer = null ;
- this.fileRef = null ;
+ this(type, null, null, null) ;
}
public JournalEntry(JournalEntryType type, FileRef fileRef, ByteBuffer bytes)
{
+ this(type, fileRef, bytes, null) ;
+ }
+
+ public JournalEntry(FileRef fileRef, Block block)
+ {
+ this(JournalEntryType.Block, fileRef, null, block) ;
+ }
+
+ JournalEntry(JournalEntryType type, FileRef fileRef, ByteBuffer bytes, Block block)
+ {
+ if ( bytes != null && block != null )
+ throw new TDBTransactionException("buffer != null and block != null") ;
this.type = type ;
this.byteBuffer = bytes ;
+ this.block = block ;
this.fileRef = fileRef ;
}
+
public JournalEntryType getType() { return type ; }
public ByteBuffer getByteBuffer() { return byteBuffer ; }
+ public Block getBlock() { return block ; }
public FileRef getFileRef() { return fileRef ; }
}
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalEntryType.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalEntryType.java?rev=1142086&r1=1142085&r2=1142086&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalEntryType.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalEntryType.java Fri Jul 1 20:39:47 2011
@@ -12,7 +12,7 @@ import org.openjena.atlas.logging.Log ;
public enum JournalEntryType
{
// Abort is used
- Block(1), Object(2), Commit(3), Abort(4), Checkpoint(5) ;
+ Block(1), Buffer(2), Object(3), Commit(4), Abort(5), Checkpoint(6) ;
final int id ;
JournalEntryType(int x) { id = x ; }
@@ -20,6 +20,7 @@ public enum JournalEntryType
static public JournalEntryType type(int x)
{
if ( x == Block.id ) return Block ;
+ else if ( x == Buffer.id ) return Buffer ;
else if ( x == Object.id ) return Object ;
else if ( x == Commit.id ) return Commit ;
else if ( x == Abort.id ) return Abort ;
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java?rev=1142086&r1=1142085&r2=1142086&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java Fri Jul 1 20:39:47 2011
@@ -51,7 +51,8 @@ public class NodeTableTrans implements N
this.nodeIndex = nodeIndex ;
this.journal = journal ;
- this.nodeTableJournal = null ;
+ nodeTableJournal = new NodeTableNative(nodeIndex, journal) ;
+ nodeTableJournal = NodeTableCache.create(sub, CacheSize, CacheSize) ;
}
public void setPassthrough(boolean v) { passthrough = v ; }
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java?rev=1142086&r1=1142085&r2=1142086&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java Fri Jul 1 20:39:47 2011
@@ -21,35 +21,43 @@ public class Transaction
private final long id ;
private final TransactionManager txnMgr ;
private final List<Iterator<?>> iterators ;
- private final List<Journal> journals = new ArrayList<Journal>() ;
- private final List<ObjectFileTrans> objJournals = new ArrayList<ObjectFileTrans>() ;
+ private Journal journal = null ;
+
+ private final List<NodeTableTrans> nodeTableTrans = new ArrayList<NodeTableTrans>() ;
+ private final List<BlockMgrJournal> blkMgrs = new ArrayList<BlockMgrJournal>() ;
public Transaction(long id, TransactionManager txnMgr)
{
this.id = id ;
this.txnMgr = txnMgr ;
+ //this.journal = journal ;
this.iterators = new ArrayList<Iterator<?>>() ;
}
public void commit()
{
- // Write commit entry.
- if ( journals.size() > 0 )
- {
- Journal jrnl = journals.get(0) ;
- JournalEntry entry = new JournalEntry(JournalEntryType.Commit, FileRef.Journal, null) ;
- jrnl.writeJournal(entry) ;
- }
+ for ( BlockMgrJournal x : blkMgrs )
+ x.commit(this) ;
+ for ( NodeTableTrans x : nodeTableTrans )
+ x.commit(this) ;
- for ( ObjectFileTrans jrnl : objJournals )
- jrnl.sync() ;
+ JournalEntry entry = new JournalEntry(JournalEntryType.Commit, FileRef.Journal, null) ;
+ journal.writeJournal(entry) ;
+ journal.sync() ; // Commit point.
+ }
- for ( Journal jrnl : journals )
- jrnl.sync() ;
+ public void abort()
+ {
+ // Clearup.
+ for ( BlockMgrJournal x : blkMgrs )
+ x.abort(this) ;
+
+ for ( NodeTableTrans x : nodeTableTrans )
+ x.abort(this) ;
}
- public void abort() { txnMgr.abort(this) ; }
+
public long getTxnId() { return id ; }
public TransactionManager getTxnMgr() { return txnMgr ; }
@@ -57,14 +65,28 @@ public class Transaction
public void removeIterator(Iterator<?> iter) { iterators.remove(iter) ; }
public List<Iterator<?>> iterators() { return Collections.unmodifiableList(iterators) ; }
- public void add(Journal journal)
+ public Iterator<Transactional> components()
+ {
+ // FIX NEEDED
+ List<Transactional> x = new ArrayList<Transactional>() ;
+ x.addAll(nodeTableTrans) ;
+ x.addAll(blkMgrs) ;
+ return x.iterator() ;
+ }
+
+ public void set(Journal journal)
+ {
+ this.journal = journal ;
+ }
+
+ public void add(NodeTableTrans ntt)
{
- journals.add(journal) ;
+ nodeTableTrans.add(ntt) ;
}
- public void add(ObjectFileTrans objFileTrans)
+ public void add(BlockMgrJournal blkMgr)
{
- objJournals.add(objFileTrans) ;
+ blkMgrs.add(blkMgr) ;
}
}
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java?rev=1142086&r1=1142085&r2=1142086&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java Fri Jul 1 20:39:47 2011
@@ -7,10 +7,10 @@
package com.hp.hpl.jena.tdb.transaction;
+import java.util.Iterator ;
+
import com.hp.hpl.jena.sparql.core.DatasetGraph ;
import com.hp.hpl.jena.tdb.TDBException ;
-import com.hp.hpl.jena.tdb.base.file.Location ;
-import com.hp.hpl.jena.tdb.setup.DatasetBuilder ;
import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
@@ -32,7 +32,7 @@ public class TransactionManager
public DatasetGraphTxnTDB begin(DatasetGraph dsg)
{
// If already a transaction ...
- // Subs transactions are a new view - commit is only comit to parent transaction.
+ // Subs transactions are a new view - commit is only commit to parent transaction.
if ( dsg instanceof DatasetGraphTxnTDB )
{
throw new TDBException("Already in transactional DatasetGraph") ;
@@ -45,18 +45,15 @@ public class TransactionManager
throw new TDBException("Not a TDB-backed dataset") ;
DatasetGraphTDB dsgtdb = (DatasetGraphTDB)dsg ;
- // For now, always build a parallel dataset - later, associate with the DatasetGraphTDB
- // [TxTDB:TODO]
// THIS IS NECESSARY BECAUSE THE DATASET MAY HAVE BEEN UPDATED AND CHANGES STILL IN CACHES.
- // MUST WRITE OUT - BUT ALSO REUSE CACHES
+ // MUST WRITE OUT - BUT ALSO REUSE CACHES.
dsgtdb.sync() ;
- Location location = dsgtdb.getLocation() ;
+ DatasetGraphTxnTDB dsgTxn = (DatasetGraphTxnTDB)new DatasetBuilderTxn(new TransactionManager()).build(dsgtdb) ;
- // TODO Don't rebuild every time.
- DatasetBuilder builder = new DatasetBuilderTxn_Old(this) ;
- //return builder.build(Location.mem(), null) ;
- DatasetGraphTxnTDB dsgTxn = (DatasetGraphTxnTDB)builder.build(location, null) ;
+ Iterator<Transactional> iter = dsgTxn.getTransaction().components() ;
+ for ( ; iter.hasNext() ; )
+ iter.next().begin(dsgTxn.getTransaction()) ;
return dsgTxn ;
}
Modified: incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/TestJournal.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/TestJournal.java?rev=1142086&r1=1142085&r2=1142086&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/TestJournal.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/test/java/com/hp/hpl/jena/tdb/transaction/TestJournal.java Fri Jul 1 20:39:47 2011
@@ -14,6 +14,7 @@ import org.junit.Test ;
import org.openjena.atlas.junit.BaseTest ;
import org.openjena.atlas.lib.Bytes ;
+import com.hp.hpl.jena.tdb.base.block.Block ;
import com.hp.hpl.jena.tdb.base.file.BufferChannel ;
import com.hp.hpl.jena.tdb.base.file.BufferChannelMem ;
import com.hp.hpl.jena.tdb.sys.FileRef ;
@@ -37,6 +38,9 @@ public class TestJournal extends BaseTes
Bytes.setLong(0x2222222211111111L, bb3.array()) ;
}
+ static Block blk1 = new Block(1, bb1) ;
+ static Block blk2 = new Block(2, bb2) ;
+ static Block blk3 = new Block(3, bb3) ;
static FileRef testRef = FileRef.create("TEST") ;
static FileRef testRef1 = FileRef.create("TEST1") ;
@@ -59,7 +63,7 @@ public class TestJournal extends BaseTes
@Test public void journal_02()
{
- JournalEntry entry1 = new JournalEntry(JournalEntryType.Block, testRef, bb1) ;
+ JournalEntry entry1 = new JournalEntry(JournalEntryType.Buffer, testRef, bb1) ;
long x = journal.writeJournal(entry1) ;
assertEquals(0, x) ;
JournalEntry entry9 = journal.readJournal(x) ;
@@ -68,7 +72,7 @@ public class TestJournal extends BaseTes
@Test public void journal_03()
{
- JournalEntry entry1 = new JournalEntry(JournalEntryType.Block, testRef, bb1) ;
+ JournalEntry entry1 = new JournalEntry(JournalEntryType.Buffer, testRef, bb1) ;
JournalEntry entry2 = new JournalEntry(JournalEntryType.Object, testRef, bb1) ;
long x1 = journal.writeJournal(entry1) ;
@@ -104,8 +108,8 @@ public class TestJournal extends BaseTes
@Test public void journal_05()
{
- JournalEntry entry1 = new JournalEntry(JournalEntryType.Block, testRef, bb1) ;
- JournalEntry entry2 = new JournalEntry(JournalEntryType.Block, testRef1, bb1) ;
+ JournalEntry entry1 = new JournalEntry(JournalEntryType.Buffer, testRef, bb1) ;
+ JournalEntry entry2 = new JournalEntry(JournalEntryType.Buffer, testRef1, bb1) ;
long x1 = journal.writeJournal(entry1) ;
bb1.clear();
@@ -122,7 +126,28 @@ public class TestJournal extends BaseTes
assertTrue(equal(entry1, entry1a)) ;
assertTrue(equal(entry2, entry2a)) ;
assertFalse(equal(entry1a, entry2a)) ;
+ }
+
+ @Test public void journal_06()
+ {
+ JournalEntry entry1 = new JournalEntry(testRef, blk1) ;
+ JournalEntry entry2 = new JournalEntry(testRef, blk2) ;
+
+ long x1 = journal.writeJournal(entry1) ;
+ bb1.clear();
+ long x2 = journal.writeJournal(entry2) ;
+ bb1.clear();
+ assertEquals(0, x1) ;
+ assertNotEquals(0, x2) ;
+ JournalEntry entry1a = journal.readJournal(x1) ;
+ JournalEntry entry2a = journal.readJournal(x2) ;
+
+ assertNotSame(entry1, entry1a) ;
+ assertNotSame(entry2, entry2a) ;
+ assertTrue(equal(entry1, entry1a)) ;
+ assertTrue(equal(entry2, entry2a)) ;
+ assertFalse(equal(entry1a, entry2a)) ;
}
private static boolean equal(JournalEntry entry1, JournalEntry entry2)
@@ -131,18 +156,50 @@ public class TestJournal extends BaseTes
return false ;
if ( ! entry1.getFileRef().equals(entry2.getFileRef()) )
return false ;
- return sameValue(entry1.getByteBuffer(), entry2.getByteBuffer()) ;
+ if ( entry1.getByteBuffer() == null && entry2.getByteBuffer() != null )
+ return false ;
+ if ( entry1.getByteBuffer() != null && entry2.getByteBuffer() == null )
+ return false ;
+ if ( entry1.getBlock() == null && entry2.getBlock() != null )
+ return false ;
+ if ( entry1.getBlock() != null && entry2.getBlock() == null )
+ return false ;
+ if ( entry1.getBlock() != null )
+ return sameValue(entry1.getBlock(), entry2.getBlock()) ;
+ else
+ return sameValue(entry1.getByteBuffer(), entry2.getByteBuffer()) ;
}
// In ByteBufferLib - remove/migrate
public static boolean sameValue(ByteBuffer bb1, ByteBuffer bb2)
{
+ if ( bb1 == null && bb2 == null ) return true ;
+ if ( bb1 == null ) return false ;
+ if ( bb2 == null ) return false ;
+
if ( bb1.capacity() != bb2.capacity() ) return false ;
- for ( int i = 0 ; i < bb1.capacity() ; i++ )
- if ( bb1.get(i) != bb2.get(i) ) return false ;
- return true ;
+ int x1 = bb1.position() ;
+ int x2 = bb1.position() ;
+
+ try {
+ for ( int i = 0 ; i < bb1.capacity() ; i++ )
+ if ( bb1.get(i) != bb2.get(i) ) return false ;
+ return true ;
+ } finally { bb1.position(x1) ; bb2.position(x2) ; }
}
+
+ // In ByteBufferLib - remove/migrate
+ public static boolean sameValue(Block bb1, Block bb2)
+ {
+ if ( bb1 == null && bb2 == null ) return true ;
+ if ( bb1 == null ) return false ;
+ if ( bb2 == null ) return false ;
+
+ if ( bb1.getId() != bb2.getId() ) return false ;
+ return sameValue(bb1.getByteBuffer(), bb2.getByteBuffer()) ;
+ }
+
}
/*