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 ;


Reply via email to