Author: andy
Date: Mon Sep 8 21:13:31 2014
New Revision: 1623583
URL: http://svn.apache.org/r1623583
Log:
Refactor Recorder
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/StorageConfig.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=1623583&r1=1623582&r2=1623583&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 Sep 8 21:13:31 2014
@@ -20,6 +20,7 @@ package com.hp.hpl.jena.tdb.setup ;
import java.io.File ;
import java.io.IOException ;
+import java.util.Collections ;
import java.util.HashMap ;
import java.util.Map ;
import java.util.Properties ;
@@ -57,18 +58,12 @@ import com.hp.hpl.jena.tdb.sys.* ;
*/
public class DatasetBuilderStd implements DatasetBuilder {
- private static final Logger log = TDB.logInfo ;
-
- private NodeTableBuilder nodeTableBuilder ;
- private TupleIndexBuilder tupleIndexBuilder ;
-
- // XXX Should not be an object field.
- //private SystemParams params ;
-
- private Map<FileRef, BlockMgr> blockMgrs = new HashMap<>() ;
- private Map<FileRef, BufferChannel> bufferChannels = new HashMap<>() ;
- private Map<FileRef, NodeTable> nodeTables = new HashMap<>() ;
+ private static final Logger log = TDB.logInfo ;
+ private NodeTableBuilder nodeTableBuilder ;
+ private TupleIndexBuilder tupleIndexBuilder ;
+ private Recorder recorder = null ;
+
public static DatasetGraphTDB create(Location location) {
SystemParams params = paramsForLocation(location) ;
DatasetBuilderStd x = new DatasetBuilderStd() ;
@@ -93,13 +88,8 @@ public class DatasetBuilderStd implement
set(blockMgrBuilder, nodeTableBuilder) ;
}
- protected void set(NodeTableBuilder nodeTableBuilder, TupleIndexBuilder
tupleIndexBuilder) {
- this.nodeTableBuilder = nodeTableBuilder ;
- this.tupleIndexBuilder = tupleIndexBuilder ;
- }
-
protected void set(BlockMgrBuilder blockMgrBuilder, NodeTableBuilder
nodeTableBuilder) {
- Recorder recorder = new Recorder(this) ;
+ recorder = new Recorder() ;
BlockMgrBuilder blockMgrBuilderRec = new
BlockMgrBuilderRecorder(blockMgrBuilder, recorder) ;
IndexBuilder indexBuilder = new
BuilderIndex.IndexBuilderStd(blockMgrBuilderRec, blockMgrBuilderRec) ;
@@ -109,7 +99,9 @@ public class DatasetBuilderStd implement
nodeTableBuilder = new NodeTableBuilderRecorder(nodeTableBuilder,
recorder) ;
TupleIndexBuilder tupleIndexBuilder = new
BuilderDB.TupleIndexBuilderStd(rangeIndexBuilder) ;
- set(nodeTableBuilder, tupleIndexBuilder) ;
+
+ this.nodeTableBuilder = nodeTableBuilder ;
+ this.tupleIndexBuilder = tupleIndexBuilder ;
}
private static SystemParams paramsForLocation(Location location) {
@@ -187,11 +179,11 @@ public class DatasetBuilderStd implement
// XXX Rework - provide a cloning constructor (copies maps).
// Or "reset"
public DatasetGraphTDB _build(Location location, SystemParams params,
boolean writeable, ReorderTransformation _transform) {
- init(location) ;
return buildWorker(location, writeable, _transform, params) ;
}
- private DatasetGraphTDB buildWorker(Location location, boolean writeable,
ReorderTransformation _transform, SystemParams params) {
+ private synchronized DatasetGraphTDB buildWorker(Location location,
boolean writeable, ReorderTransformation _transform, SystemParams params) {
+ recorder.start() ;
DatasetControl policy = createConcurrencyPolicy() ;
NodeTable nodeTable = makeNodeTable(location, params) ;
TripleTable tripleTable = makeTripleTable(location, nodeTable, policy,
params) ;
@@ -200,22 +192,26 @@ public class DatasetBuilderStd implement
ReorderTransformation transform = (_transform == null) ?
chooseReorderTransformation(location) : _transform ;
- StorageConfig storageConfig = new StorageConfig(location, params,
writeable, blockMgrs, bufferChannels,
- nodeTables) ;
+ StorageConfig storageConfig = new StorageConfig(location, params,
writeable,
+ recorder.blockMgrs,
recorder.bufferChannels, recorder.nodeTables) ;
+
+ recorder.finish() ;
+
DatasetGraphTDB dsg = new DatasetGraphTDB(tripleTable, quadTable,
prefixes, transform, storageConfig) ;
// TDB does filter placement on BGPs itself.
dsg.getContext().set(ARQ.optFilterPlacementBGP, false) ;
QC.setFactory(dsg.getContext(), OpExecutorTDB1.OpExecFactoryTDB) ;
return dsg ;
}
+
+ private static <X,Y> Map<X,Y> freeze(Map<X,Y> map) {
+ return Collections.unmodifiableMap(new HashMap<>(map)) ;
+ }
protected DatasetControl createConcurrencyPolicy() {
return new DatasetControlMRSW() ;
}
- protected void init(Location location) {
- }
-
protected TripleTable makeTripleTable(Location location, NodeTable
nodeTable, DatasetControl policy, SystemParams params) {
String primary = params.getPrimaryIndexTriples() ;
String[] indexes = params.getTripleIndexes() ;
@@ -437,22 +433,42 @@ public class DatasetBuilderStd implement
static class Recorder implements RecordBlockMgr, RecordNodeTable {
- private DatasetBuilderStd dsBuilder ;
+ Map<FileRef, BlockMgr> blockMgrs = null ;
+ Map<FileRef, BufferChannel> bufferChannels = null ;
+ Map<FileRef, NodeTable> nodeTables = null ;
+ boolean recording = false ;
- Recorder(DatasetBuilderStd dsBuilder) {
- this.dsBuilder = dsBuilder ;
+ Recorder() { }
+
+ void start() {
+ if ( recording )
+ throw new TDBException("Recorder already recording") ;
+ recording = true ;
+ blockMgrs = new HashMap<>() ;
+ bufferChannels = new HashMap<>() ;
+ nodeTables = new HashMap<>() ;
+ }
+ void finish() {
+ if ( ! recording )
+ throw new TDBException("Recorder not recording") ;
+ blockMgrs = null ;
+ bufferChannels = null ;
+ nodeTables = null ;
+ recording = false ;
}
-
+
@Override
public void record(FileRef fileRef, BlockMgr blockMgr) {
- // log.info("BlockMgr: "+fileRef) ;
- dsBuilder.blockMgrs.put(fileRef, blockMgr) ;
+ if ( recording )
+ // log.info("BlockMgr: "+fileRef) ;
+ blockMgrs.put(fileRef, blockMgr) ;
}
@Override
public void record(FileRef fileRef, NodeTable nodeTable) {
- // log.info("NodeTable: "+fileRef) ;
- dsBuilder.nodeTables.put(fileRef, nodeTable) ;
+ if ( recording )
+ // log.info("NodeTable: "+fileRef) ;
+ nodeTables.put(fileRef, nodeTable) ;
}
}
}
Modified:
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/StorageConfig.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/StorageConfig.java?rev=1623583&r1=1623582&r2=1623583&view=diff
==============================================================================
---
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/StorageConfig.java
(original)
+++
jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/StorageConfig.java
Mon Sep 8 21:13:31 2014
@@ -37,9 +37,9 @@ public class StorageConfig
public final boolean writeable ;
public StorageConfig(Location location, SystemParams params, boolean
writeable,
- Map<FileRef, BlockMgr> blockMgrs,
- Map<FileRef, BufferChannel> bufferChannels,
- Map<FileRef, NodeTable> nodeTables)
+ Map<FileRef, BlockMgr> blockMgrs,
+ Map<FileRef, BufferChannel> bufferChannels,
+ Map<FileRef, NodeTable> nodeTables)
{
this.location = location ;
this.params = params ;