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/15 13:55:10 UTC
svn commit: r1147108 - in /incubator/jena/Experimental/TxTDB/trunk:
src-dev/tx/ src/main/java/com/hp/hpl/jena/tdb/transaction/
Author: andy
Date: Fri Jul 15 11:55:07 2011
New Revision: 1147108
URL: http://svn.apache.org/viewvc?rev=1147108&view=rev
Log: (empty)
Modified:
incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.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/Journal.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java
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=1147108&r1=1147107&r2=1147108&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 15 11:55:07 2011
@@ -108,8 +108,8 @@ public class TxMain
DatasetGraphTxn dsg = sConn.begin(ReadWrite.WRITE) ;
load("D.ttl", dsg) ; // Loads 3 triples
- query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead) ;
- query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsg) ;
+ query("C=0", "SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead) ;
+ query("C=3", "SELECT (count(*) AS ?C) { ?s ?p ?o }", dsg) ;
dsg.commit() ;
dsg.close() ;
dsg = null ;
@@ -117,21 +117,21 @@ public class TxMain
// Reader after update.
// First reader still reading.
- //DatasetGraphTxn dsgRead2 = sConn.begin(ReadWrite.READ) ;
+ DatasetGraphTxn dsgRead2 = sConn.begin(ReadWrite.READ) ;
//query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead2) ;
- query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead) ;
+ query("C=0", "SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead) ;
// A writer.
DatasetGraphTxn dsg2 = sConn.begin(ReadWrite.WRITE) ;
- //load("D1.ttl", dsg2) ; // Loads 1 triples
- query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsg2) ;
- //query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead2) ;
- query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead) ;
+ load("D1.ttl", dsg2) ; // Loads 1 triples
+ query("C=4", "SELECT (count(*) AS ?C) { ?s ?p ?o }", dsg2) ;
+ query("C=3", "SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead2) ;
+ query("C=0", "SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead) ;
dsg2.commit() ;
dsg2.close() ;
dsg2 = null ;
- //dsgRead2.close() ;
+ dsgRead2.close() ;
// DatasetGraphTxn dsgRead2 = sConn.begin(ReadWrite.READ) ;
// query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead2) ;
@@ -143,7 +143,7 @@ public class TxMain
// query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead) ;
DatasetGraphTxn dsgRead3 = sConn.begin(ReadWrite.READ) ;
- query("SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead3) ;
+ query("C=4", "SELECT (count(*) AS ?C) { ?s ?p ?o }", dsgRead3) ;
exit(0) ;
}
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=1147108&r1=1147107&r2=1147108&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 15 11:55:07 2011
@@ -26,7 +26,6 @@ public class BlockMgrJournal implements
{
private static Logger log = LoggerFactory.getLogger(BlockMgrJournal.class) ;
private BlockMgr blockMgr ; // read-only except during journal checkpoint.
- private Journal journal ;
private Transaction transaction ;
private FileRef fileRef ;
@@ -37,23 +36,16 @@ public class BlockMgrJournal implements
private boolean closed = false ;
private boolean active = false ;
- public BlockMgrJournal(Transaction txn, FileRef fileRef, BlockMgr underlyingBlockMgr, Journal journal)
+ public BlockMgrJournal(Transaction txn, FileRef fileRef, BlockMgr underlyingBlockMgr)
{
- reset(txn, fileRef, underlyingBlockMgr, journal) ;
+ reset(txn, fileRef, underlyingBlockMgr) ;
}
@Override
public void begin(Transaction txn)
{
- reset(txn, fileRef, blockMgr, journal) ;
+ reset(txn, fileRef, blockMgr) ;
}
-
-
-// public void begin(Transaction txn) ;
-// public void abort(Transaction txn) ;
-// public void commitPrepare(Transaction txn) ;
-// public void commitEnact(Transaction txn) ;
-// public void clearup(Transaction txn) ;
@Override
public void commitPrepare(Transaction txn)
@@ -87,11 +79,10 @@ public class BlockMgrJournal implements
/** Set, or reset, this BlockMgr.
* Enables it to be reused when already part of a datastructure.
*/
- private void reset(Transaction txn, FileRef fileRef, BlockMgr underlyingBlockMgr, Journal journal)
+ private void reset(Transaction txn, FileRef fileRef, BlockMgr underlyingBlockMgr)
{
this.fileRef = fileRef ;
this.blockMgr = underlyingBlockMgr ;
- this.journal = journal ;
reset(txn) ;
}
@@ -280,7 +271,7 @@ public class BlockMgrJournal implements
private void writeJournalEntry(Block blk)
{
blk.getByteBuffer().rewind() ;
- journal.writeJournal(fileRef, blk) ;
+ transaction.getJournal().writeJournal(fileRef, blk) ;
}
private void logState()
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=1147108&r1=1147107&r2=1147108&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 15 11:55:07 2011
@@ -14,9 +14,6 @@ import com.hp.hpl.jena.tdb.TDBException
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.block.BlockMgrReadonly ;
-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 ;
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 ;
@@ -40,7 +37,6 @@ public class DatasetBuilderTxn
private TransactionManager txnMgr ;
private Map<FileRef, BlockMgr> blockMgrs ;
private Map<FileRef, NodeTable> nodeTables ;
- private Journal journal ;
private Transaction txn ;
private DatasetGraphTDB dsg ;
@@ -72,14 +68,6 @@ public class DatasetBuilderTxn
private DatasetGraphTDB buildWritable()
{
- BufferChannel chan ;
- if ( dsg.getLocation().isMem() )
- chan = BufferChannelMem.create() ;
- else
- chan = new BufferChannelFile(dsg.getLocation().absolute(Names.journalFile)) ;
- journal = new Journal(chan) ;
- txn.setJournal(journal) ;
-
BlockMgrBuilder blockMgrBuilder = new BlockMgrBuilderTx() ;
NodeTableBuilder nodeTableBuilder = new NodeTableBuilderTx() ;
DatasetBuilderStd x = new DatasetBuilderStd(blockMgrBuilder, nodeTableBuilder) ;
@@ -148,7 +136,7 @@ public class DatasetBuilderTxn
BlockMgr baseMgr = blockMgrs.get(ref) ;
if ( baseMgr == null )
throw new TDBException("No BlockMgr for "+ref) ;
- BlockMgrJournal blkMgr = new BlockMgrJournal(txn, ref, baseMgr, journal) ;
+ BlockMgrJournal blkMgr = new BlockMgrJournal(txn, ref, baseMgr) ;
txn.add(blkMgr) ;
return blkMgr ;
}
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=1147108&r1=1147107&r2=1147108&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 15 11:55:07 2011
@@ -41,7 +41,7 @@ class Journal implements Iterable<Journa
// We want random access AND stream efficiency to write. Opps.
// Also means we can't use DataOutputStream etc.
- BufferChannel channel ;
+ private BufferChannel channel ;
private long position ;
// Length, type, fileRef, [block id]
// Length is length of variable part.
@@ -83,7 +83,7 @@ class Journal implements Iterable<Journa
synchronized
private long _write(JournalEntryType type, FileRef fileRef, ByteBuffer buffer, Block block)
{
- log.info(type+","+fileRef+", "+buffer+", "+block) ;
+ //log.info("@"+position()+" -- "+type+","+fileRef+", "+buffer+", "+block) ;
if ( buffer != null && block != null )
throw new TDBTransactionException("Buffer and block to write") ;
@@ -200,7 +200,7 @@ class Journal implements Iterable<Journa
synchronized
public Iterator<JournalEntry> entries()
{
- channel.position(0) ;
+ position(0) ;
return new IteratorEntries() ;
}
@@ -213,8 +213,14 @@ class Journal implements Iterable<Journa
@Override
public void close() { channel.close() ; }
+ public long size() { return channel.size() ; }
+
public void truncate(long size) { channel.truncate(size) ; }
+ public void append() { position(size()) ; }
+
+ public long position() { return channel.position() ; }
+
public void position(long posn) { channel.position(posn) ; }
}
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java?rev=1147108&r1=1147107&r2=1147108&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/JournalControl.java Fri Jul 15 11:55:07 2011
@@ -36,12 +36,12 @@ public class JournalControl
public static void print(Journal journal)
{
- System.out.println("Posn: "+journal.channel.size()) ;
+ System.out.println("Size: "+journal.size()) ;
for ( JournalEntry e : journal )
{
System.out.println(JournalEntry.format(e)) ;
- System.out.println("Posn: "+journal.channel.position()+" : ("+(journal.channel.size()-journal.channel.position())+")") ;
+ System.out.println("Posn: "+journal.position()+" : ("+(journal.size()-journal.position())+")") ;
}
}
@@ -133,10 +133,10 @@ public class JournalControl
{
// What about the Transactional components of a transation.
Journal journal = transaction.getJournal() ;
- System.out.println(">> REPLAY") ;
- print(journal) ;
- System.out.println("<< REPLAY") ;
- System.out.flush() ;
+// System.out.println(">> REPLAY") ;
+// print(journal) ;
+// System.out.println("<< REPLAY") ;
+// System.out.flush() ;
DatasetGraphTDB dsg = transaction.getBaseDataset() ;
replay(journal, dsg) ;
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=1147108&r1=1147107&r2=1147108&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 15 11:55:07 2011
@@ -25,7 +25,7 @@ public class Transaction
private final String label ;
private final TransactionManager txnMgr ;
private final List<Iterator<?>> iterators ;
- private Journal journal = null ;
+ private final Journal journal ;
private TxnState state ;
private ReadWrite mode ;
@@ -35,8 +35,6 @@ public class Transaction
private DatasetGraphTDB basedsg ;
private DatasetGraphTxn activedsg ;
-
-
public Transaction(DatasetGraphTDB dsg, ReadWrite mode, long id, String label, TransactionManager txnMgr)
{
this.id = id ;
@@ -53,6 +51,7 @@ public class Transaction
this.txnMgr = txnMgr ;
this.basedsg = dsg ;
this.mode = mode ;
+ this.journal = txnMgr.getJournal() ;
activedsg = null ; // Don't know yet.
this.iterators = new ArrayList<Iterator<?>>() ;
state = TxnState.ACTIVE ;
@@ -181,11 +180,6 @@ public class Transaction
return x.iterator() ;
}
- public void setJournal(Journal journal)
- {
- this.journal = journal ;
- }
-
public Journal getJournal() { return journal ; }
public void add(NodeTableTrans ntt)
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=1147108&r1=1147107&r2=1147108&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 15 11:55:07 2011
@@ -24,7 +24,11 @@ import org.slf4j.LoggerFactory ;
import com.hp.hpl.jena.tdb.DatasetGraphTxn ;
import com.hp.hpl.jena.tdb.ReadWrite ;
+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 ;
import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
+import com.hp.hpl.jena.tdb.sys.Names ;
import com.hp.hpl.jena.tdb.sys.SystemTDB ;
public class TransactionManager
@@ -56,13 +60,24 @@ public class TransactionManager
private Thread committerThread ;
private DatasetGraphTDB baseDataset ;
+ private Journal journal ;
+ // it would be better to associate with the DatasetGraph itself.
+
+ //static Map<DatasetGraphTDB, Journal> journals = new HashMap<DatasetGraphTDB, Journal>() ;
public TransactionManager(DatasetGraphTDB dsg)
{
// if ( ! ( dsg instanceof DatasetGraphTDB ) )
// throw new TDBException("Not a TDB-backed dataset") ;
this.baseDataset = dsg ;
+
+ BufferChannel chan ;
+ if ( dsg.getLocation().isMem() )
+ chan = BufferChannelMem.create() ;
+ else
+ chan = new BufferChannelFile(dsg.getLocation().absolute(Names.journalFile)) ;
+ this.journal = new Journal(chan) ;
// LATER
// Committer c = new Committer() ;
// this.committerThread = new Thread(c) ;
@@ -142,7 +157,7 @@ public class TransactionManager
{
// Can't make permentent at the moment.
commitedAwaitingFlush.add(transaction) ;
- log.debug("Commit pending: "+transaction.getLabel());
+ //log.debug("Commit pending: "+transaction.getLabel());
//if ( log.isDebugEnabled() )
// log.debug("Commit blocked at the moment") ;
@@ -200,7 +215,7 @@ public class TransactionManager
Transaction txn2 = queue.take() ;
if ( txn2.getMode() == READ )
continue ;
- log("Delayed commit", txn2) ;
+ log.info("Delayed commit", txn2) ;
// This takes a Write lock on the DSG - this is where it blocks.
JournalControl.replay(txn2) ;
commitedAwaitingFlush.remove(txn) ;
@@ -224,6 +239,11 @@ public class TransactionManager
}
+ public Journal getJournal()
+ {
+ return journal ;
+ }
+
private boolean log()
{
return syslog.isDebugEnabled() || log.isDebugEnabled() ;
@@ -253,10 +273,8 @@ public class TransactionManager
// able to play several transactions at once (later).
try {
Transaction txn = queue.take() ;
- System.out.println("Async commit") ;
// This takes a Write lock on the DSG - this is where it blocks.
JournalControl.replay(txn) ;
- System.out.println("Async commit succeeded") ;
synchronized(TransactionManager.this)
{
commitedAwaitingFlush.remove(txn) ;