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) ;