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