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 2012/08/06 22:35:33 UTC

svn commit: r1369990 - in /jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb: setup/DatasetBuilderStd.java store/StoreConfig.java transaction/DatasetBuilderTxn.java transaction/Transaction.java transaction/TransactionManager.java

Author: andy
Date: Mon Aug  6 20:35:32 2012
New Revision: 1369990

URL: http://svn.apache.org/viewvc?rev=1369990&view=rev
Log:
JENA-290

Pass the reorder transformation from the base dataset to the transaction dataset, instead of reconstructing it.

Modified:
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/setup/DatasetBuilderStd.java
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/StoreConfig.java
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetBuilderTxn.java
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/setup/DatasetBuilderStd.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/setup/DatasetBuilderStd.java?rev=1369990&r1=1369989&r2=1369990&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/setup/DatasetBuilderStd.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/setup/DatasetBuilderStd.java Mon Aug  6 20:35:32 2012
@@ -23,6 +23,7 @@ import java.util.Map ;
 
 import org.openjena.atlas.lib.ColumnMap ;
 import org.openjena.atlas.lib.StrUtils ;
+import org.openjena.atlas.logging.Log ;
 import org.slf4j.Logger ;
 
 import com.hp.hpl.jena.query.ARQ ;
@@ -152,11 +153,11 @@ public class DatasetBuilderStd implement
         // Ensure that there is global synchronization
         synchronized(DatasetBuilderStd.class)
         {
-            return _build(location, params) ;
+            return _build(location, params, null) ;
         }
     }
     
-    protected DatasetGraphTDB _build(Location location, SystemParams _params)
+    public DatasetGraphTDB _build(Location location, SystemParams _params, ReorderTransformation _transform)
     {
         params = _params ;
         init(location) ;
@@ -169,9 +170,10 @@ public class DatasetBuilderStd implement
         TripleTable tripleTable = makeTripleTable(location, nodeTable, policy) ; 
         QuadTable quadTable = makeQuadTable(location, nodeTable, policy) ;
         DatasetPrefixesTDB prefixes = makePrefixTable(location, policy) ;
-        ReorderTransformation transform  = chooseReorderTransformation(location) ;
         
-        StoreConfig storeConfig = new StoreConfig(location, params, blockMgrs, bufferChannels, nodeTables) ;
+        ReorderTransformation transform = (_transform==null) ? chooseReorderTransformation(location) : _transform ;
+        
+        StoreConfig storeConfig = new StoreConfig(location, params, blockMgrs, bufferChannels, nodeTables, transform) ;
         DatasetGraphTDB dsg = new DatasetGraphTDB(tripleTable, quadTable, prefixes, transform, storeConfig) ;
         return dsg ;
     }
@@ -321,6 +323,7 @@ public class DatasetBuilderStd implement
 
     public static ReorderTransformation chooseOptimizer(Location location)
     {
+        Log.info(DatasetBuilderStd.class, "chooseOptimizer") ;
         if ( location == null )
             return ReorderLib.identity() ;
 

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/StoreConfig.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/StoreConfig.java?rev=1369990&r1=1369989&r2=1369990&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/StoreConfig.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/StoreConfig.java Mon Aug  6 20:35:32 2012
@@ -20,6 +20,7 @@ package com.hp.hpl.jena.tdb.store;
 
 import java.util.Map ;
 
+import com.hp.hpl.jena.sparql.engine.optimizer.reorder.ReorderTransformation ;
 import com.hp.hpl.jena.tdb.base.block.BlockMgr ;
 import com.hp.hpl.jena.tdb.base.file.BufferChannel ;
 import com.hp.hpl.jena.tdb.base.file.Location ;
@@ -29,22 +30,25 @@ import com.hp.hpl.jena.tdb.sys.FileRef ;
 
 public class StoreConfig
 {
-    public SystemParams params ;
-    public Map<FileRef, BlockMgr> blockMgrs ;
-    public Map<FileRef, BufferChannel> bufferChannels ;
-    public Map<FileRef, NodeTable> nodeTables ;
-    public Location location ; 
+    public final SystemParams params ;
+    public final Map<FileRef, BlockMgr> blockMgrs ;
+    public final Map<FileRef, BufferChannel> bufferChannels ;
+    public final Map<FileRef, NodeTable> nodeTables ;
+    public final Location location ;
+    public final ReorderTransformation reorder ; 
 
     public StoreConfig(Location location, SystemParams params, 
                        Map<FileRef, BlockMgr> blockMgrs, 
                        Map<FileRef, BufferChannel> bufferChannels,
-                       Map<FileRef, NodeTable> nodeTables)
+                       Map<FileRef, NodeTable> nodeTables,
+                       ReorderTransformation reorder)
     {
         this.location = location ;
         this.params = params ;
         this.blockMgrs = blockMgrs ;
         this.bufferChannels = bufferChannels ;
         this.nodeTables = nodeTables ;
+        this.reorder = reorder ;
     }
     
 }

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetBuilderTxn.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetBuilderTxn.java?rev=1369990&r1=1369989&r2=1369990&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetBuilderTxn.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/DatasetBuilderTxn.java Mon Aug  6 20:35:32 2012
@@ -85,7 +85,8 @@ public class DatasetBuilderTxn
         BlockMgrBuilder blockMgrBuilder = new BlockMgrBuilderReadonly() ;
         NodeTableBuilder nodeTableBuilder = new NodeTableBuilderReadonly() ;
         DatasetBuilderStd x = new DatasetBuilderStd(blockMgrBuilder, nodeTableBuilder) ;
-        DatasetGraphTDB dsg2 = x.build(dsg.getLocation(), dsg.getConfig().params) ;
+        DatasetGraphTDB dsg2 = x._build(dsg.getLocation(), dsg.getConfig().params, dsg.getTransform()) ;
+        
         return dsg2 ;
     }
 
@@ -94,7 +95,7 @@ public class DatasetBuilderTxn
         BlockMgrBuilder blockMgrBuilder = new BlockMgrBuilderTx() ;
         NodeTableBuilder nodeTableBuilder = new NodeTableBuilderTx() ;
         DatasetBuilderStd x = new DatasetBuilderStd(blockMgrBuilder, nodeTableBuilder) ;
-        DatasetGraphTDB dsg2 = x.build(dsg.getLocation(), dsg.getConfig().params) ;
+        DatasetGraphTDB dsg2 = x._build(dsg.getLocation(), dsg.getConfig().params, dsg.getTransform()) ;
         return dsg2 ;
     }
 

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java?rev=1369990&r1=1369989&r2=1369990&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/Transaction.java Mon Aug  6 20:35:32 2012
@@ -261,7 +261,8 @@ public class Transaction
 //        }
 //    }
     
-    public List<TransactionLifecycle> components()
+    /** Return the list of items registered for the transaction lifecycle */ 
+    public List<TransactionLifecycle> lifecycleComponents()
     {
         List<TransactionLifecycle> x = new ArrayList<TransactionLifecycle>() ;
         x.addAll(nodeTableTrans) ;

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java?rev=1369990&r1=1369989&r2=1369990&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/TransactionManager.java Mon Aug  6 20:35:32 2012
@@ -32,6 +32,7 @@ import java.util.concurrent.BlockingQueu
 import java.util.concurrent.LinkedBlockingDeque ;
 import java.util.concurrent.Semaphore ;
 import java.util.concurrent.atomic.AtomicLong ;
+import java.util.concurrent.atomic.AtomicReference ;
 
 import org.openjena.atlas.lib.Pair ;
 import org.openjena.atlas.logging.Log ;
@@ -93,6 +94,12 @@ public class TransactionManager
     AtomicLong committedWriters = new AtomicLong(0) ;
     AtomicLong abortedWriters = new AtomicLong(0) ;
     
+    // This is the last read-transaction created
+    // The read DatasetGraphTxn can be used by all the readers seeing the same view.
+    // A write transaction clears this when it commits; future readers see the new state;
+    // the first reader of a particular state creates teh view datasetgraph and sets the  lastreader.
+    private AtomicReference<DatasetGraphTxn> lastreader = new AtomicReference<DatasetGraphTxn>(null) ;
+    
     // Ensure single writer.
     private Semaphore writersWaiting = new Semaphore(1, true) ;
     // Delayes enacting transactions.
@@ -292,17 +299,14 @@ public class TransactionManager
         journal.close() ;
     }
     
-    private Transaction createTransaction(DatasetGraphTDB dsg, ReadWrite mode, String label)
-    {
-        Transaction txn = new Transaction(dsg, mode, transactionId.getAndIncrement(), label, this) ;
-        return txn ;
-    }
-
     public DatasetGraphTxn begin(ReadWrite mode)
     {
         return begin(mode, null) ;
     }
     
+    
+    public /*for testing only*/ static final boolean DEBUG = false ; 
+
     public DatasetGraphTxn begin(ReadWrite mode, String label)
     {
         // Not synchronized (else blocking on semaphore will never wake up
@@ -323,8 +327,6 @@ public class TransactionManager
         // entry synchronized part
         return begin$(mode, label) ;
     }
-    
-    public static final boolean DEBUG = false ; 
         
     // If DatasetGraphTransaction has a sync lock on sConn, this
     // does not need to be sync'ed. But it's possible to use some
@@ -357,17 +359,49 @@ public class TransactionManager
         Transaction txn = createTransaction(dsg, mode, label) ;
         
         log("begin$", txn) ;
+        
+        // Code for reusing the lastreader 
+//        if ( mode == ReadWrite.READ )
+//        {
+//            DatasetGraphTxn dsgTxn = lastreader.get() ;
+//            if ( dsgTxn != null )
+//            {
+//                // Use cached
+//                // Sort out components.
+//            }
+//        }
 
-        DatasetGraphTxn dsgTxn = (DatasetGraphTxn)new DatasetBuilderTxn(this).build(txn, mode, dsg) ;
+        DatasetGraphTxn dsgTxn = createDSGTxn(dsg,txn, mode) ;
         txn.setActiveDataset(dsgTxn) ;
 
-        for ( TransactionLifecycle component : dsgTxn.getTransaction().components() )
+        // Empty for READ ; only WRITE transactions have components that need notifiying.
+        List<TransactionLifecycle> components = dsgTxn.getTransaction().lifecycleComponents() ;
+
+        if ( mode == ReadWrite.READ )
+        {
+            if ( components.size() != 0 )
+                log.warn("read transaction, non-empty componets list") ;
+        }
+        
+        for ( TransactionLifecycle component : components )
             component.begin(dsgTxn.getTransaction()) ;
 
         noteStartTxn(txn) ;
         return dsgTxn ;
     }
 
+    private Transaction createTransaction(DatasetGraphTDB dsg, ReadWrite mode, String label)
+    {
+        Transaction txn = new Transaction(dsg, mode, transactionId.getAndIncrement(), label, this) ;
+        return txn ;
+    }
+
+    
+    private DatasetGraphTxn createDSGTxn(DatasetGraphTDB dsg, Transaction txn, ReadWrite mode)
+    {
+        return (DatasetGraphTxn)new DatasetBuilderTxn(this).build(txn, mode, dsg) ;
+    }
+
     /* Signal a transaction has commited.  The journal has a commit record
      * and a sync to disk. The code here manages the inter-transaction stage
      *  of deciding how to play the changes back to the base data. 
@@ -409,7 +443,7 @@ public class TransactionManager
     private void enactTransaction(Transaction transaction)
     {
         // Really, really do it!
-        for ( TransactionLifecycle x : transaction.components() )
+        for ( TransactionLifecycle x : transaction.lifecycleComponents() )
         {
             x.commitEnact(transaction) ;
             x.commitClearup(transaction) ;