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/07 17:26:17 UTC
svn commit: r1143883 - in /incubator/jena/Experimental/TxTDB/trunk:
src-dev/tx/ src/main/java/com/hp/hpl/jena/tdb/base/file/
src/main/java/com/hp/hpl/jena/tdb/nodetable/
src/main/java/com/hp/hpl/jena/tdb/store/
src/main/java/com/hp/hpl/jena/tdb/sys/ sr...
Author: andy
Date: Thu Jul 7 15:26:17 2011
New Revision: 1143883
URL: http://svn.apache.org/viewvc?rev=1143883&view=rev
Log: (empty)
Added:
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TableBase.java (with props)
Modified:
incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java
incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/Location.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTable.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableView.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableWrapper.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetPrefixesTDB.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/QuadTable.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TripleTable.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/CachingTDBMaker.java
incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/Names.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/NodeTableTrans.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/DevTx.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/DevTx.java Thu Jul 7 15:26:17 2011
@@ -2,11 +2,9 @@ package tx;
public class DevTx
{
- // Does not work for memory datasets. (in-memory journal, then opened on disk?)
- // Moding in Journal - startReply-endReplay.
-
- // DatasetGraphTDB : read-only mode (when transaction active)
- // Prefixes as well.
+ // NodeTable journalling and recovery
+ // Currently, NT wriiten in commit phase, before the journal commit entry.
+ // Safe
// DSG.add(Quad(tripleInQuad, triple)) does not affect default graph.
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=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src-dev/tx/TxMain.java Thu Jul 7 15:26:17 2011
@@ -25,6 +25,8 @@ import com.hp.hpl.jena.sparql.util.NodeF
import com.hp.hpl.jena.sparql.util.QueryExecUtils ;
import com.hp.hpl.jena.tdb.TDBFactory ;
import com.hp.hpl.jena.tdb.base.block.FileMode ;
+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.FileFactory ;
import com.hp.hpl.jena.tdb.base.objectfile.ObjectFile ;
import com.hp.hpl.jena.tdb.base.record.Record ;
@@ -36,6 +38,7 @@ import com.hp.hpl.jena.tdb.nodetable.Nod
import com.hp.hpl.jena.tdb.setup.DatasetBuilderStd ;
import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
import com.hp.hpl.jena.tdb.store.NodeId ;
+import com.hp.hpl.jena.tdb.sys.Names ;
import com.hp.hpl.jena.tdb.sys.SystemTDB ;
import com.hp.hpl.jena.tdb.transaction.DatasetGraphTxnTDB ;
import com.hp.hpl.jena.tdb.transaction.Journal ;
@@ -73,21 +76,35 @@ public class TxMain
//SystemTDB.setFileMode(FileMode.direct) ;
SystemTDB.setFileMode(FileMode.mapped) ;
+ DatasetGraphTDB dsg0 = build() ;
- initFS() ;
-
-// RangeIndex rIdx = SetupTDB.createBPTree(new FileSet("DB/tree"), new RecordFactory(24, 0)) ;
-//
-// for ( Record r : rIdx )
-// {
-// System.out.println(r) ;
-// }
-// exit(0) ;
-
+ //initFS() ;
+ // replay!
+ String journalFilename = dsg0.getLocation().absolute(Names.journalFile) ;
+ if ( FileOps.exists(journalFilename))
+ {
+
+ BufferChannel bc = new BufferChannelFile(journalFilename) ;
+ if ( bc.size() != 0 )
+ {
+ System.out.println("Recovery !") ;
+ query("Before", "SELECT (Count(*) AS ?c1) { ?s ?p ?o }", dsg0) ;
+ Journal j0 = new Journal(bc) ;
+
+ // NOTE
+ // The NodeTable Journal has already been done!
+
+ Replay.replay(j0, dsg0) ;
+ System.out.println("after") ;
+ query("After", "SELECT (Count(*) AS ?c1) { ?s ?p ?o }", dsg0) ;
+ bc.close() ;
+ FileOps.delete(journalFilename) ;
+
+ }
+ }
- DatasetGraphTDB dsg0 = build() ;
dsg0.sync() ;
- query("SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
+ query("Initial state", "SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
//exit(0) ;
TransactionManager txnMgr = new TransactionManager() ;
@@ -95,12 +112,15 @@ public class TxMain
DatasetGraphTxnTDB dsg1 = txnMgr.begin(dsg0) ;
load("D.ttl", dsg1) ;
- query("SELECT (Count(*) AS ?c1) { ?s ?p ?o }", dsg1) ;
- query("SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
+ query("dsg1", "SELECT (Count(*) AS ?c1) { ?s ?p ?o }", dsg1) ;
+ query("dsg0", "SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
+
dsg1.commit() ;
- System.out.println("Replay") ;
+// dsg1.abort() ;
+
+ //System.out.println("Replay") ;
// Better journal control
@@ -110,9 +130,9 @@ public class TxMain
Journal j = dsg1.getTransaction().getJournal() ;
//Replay.print(j) ;
- Replay.replay(j, dsg0) ;
- query("SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
- query("SELECT * { ?s ?p ?o }", dsg0) ;
+ //Replay.replay(j, dsg0) ;
+ //query("dsg0", "SELECT (Count(*) AS ?c0) { ?s ?p ?o }", dsg0) ;
+ query("dsg0", "SELECT * { ?s ?p ?o }", dsg0) ;
write(dsg0.getDefaultGraph(), "TTL") ;
exit(0) ;
@@ -187,8 +207,6 @@ public class TxMain
System.out.println("Trans: "+nt.getNodeIdForNode(node2)) ;
System.out.println("Base: "+nt0.getNodeIdForNode(node3)) ;
System.out.println("Trans: "+nt.getNodeIdForNode(node3)) ;
-
-
}
private static void initFS()
@@ -199,10 +217,10 @@ public class TxMain
private static DatasetGraphTDB build()
{
- return DatasetBuilderStd.build() ;
-
-// DatasetGraphTDB dsg = TDBFactory.createDatasetGraph(DBdir) ;
-// return dsg ;
+ //return DatasetBuilderStd.build() ;
+ //DatasetGraphTDB dsg = TDBFactory.createDatasetGraph(DBdir) ;
+ DatasetGraphTDB dsg = DatasetBuilderStd.build(DBdir) ;
+ return dsg ;
}
private static DatasetGraphTxnTDB buildTx(DatasetGraph dsg)
@@ -211,8 +229,10 @@ public class TxMain
return dsg2 ;
}
- public static void query(String queryStr, DatasetGraph dsg)
+ public static void query(String label, String queryStr, DatasetGraph dsg)
{
+ System.out.print("**** ") ;
+ System.out.println(label) ;
Query query = QueryFactory.create(queryStr, Syntax.syntaxARQ) ;
QueryExecution qExec = QueryExecutionFactory.create(query, DatasetFactory.create(dsg)) ;
QueryExecUtils.executeQuery(query, qExec) ;
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/Location.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/Location.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/Location.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/base/file/Location.java Thu Jul 7 15:26:17 2011
@@ -179,6 +179,36 @@ public class Location
}
@Override
+ public int hashCode()
+ {
+ if ( isMem )
+ return 37 ;
+ final int prime = 31 ;
+ int result = 1 ;
+ result = prime * result + ((pathname == null) ? 0 : pathname.hashCode()) ;
+ return result ;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj) return true ;
+ if (obj == null) return false ;
+ if (getClass() != obj.getClass()) return false ;
+ Location other = (Location)obj ;
+ if ( isMem && other.isMem ) return true ;
+ if ( isMem && ! other.isMem ) return false ;
+ if ( ! isMem && other.isMem ) return false ;
+
+ if (pathname == null)
+ {
+ if (other.pathname != null) return false ;
+ } else
+ if (!pathname.equals(other.pathname)) return false ;
+ return true ;
+ }
+
+ @Override
public String toString() { return "location:"+pathname ; }
}
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTable.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTable.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTable.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTable.java Thu Jul 7 15:26:17 2011
@@ -48,6 +48,10 @@ public interface NodeTupleTable extends
public boolean isEmpty() ;
+ public boolean isReadOnly() ;
+ public void setReadOnly(boolean mode) ;
+
+
/** Clear the tuple table. After this operation, find* will find nothing.
* This does not mean all data has been removed - for example, it does not mean
* that any node table has been emptied.
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java Thu Jul 7 15:26:17 2011
@@ -31,6 +31,8 @@ public class NodeTupleTableConcrete impl
protected final NodeTable nodeTable ;
protected final TupleTable tupleTable ;
private final ConcurrencyPolicy conPolicy ;
+ private boolean readOnly ;
+
/*
* Concurrency checking: Everything goes through one of addRow, deleteRow or
* find*
@@ -41,17 +43,23 @@ public class NodeTupleTableConcrete impl
if (indexes.length == 0 || indexes[0] == null) throw new TDBException("A primary index is required") ;
for (TupleIndex index : indexes)
{
- if (N != index.getTupleLength()) throw new TDBException(format("Inconsistent: TupleTable width is %d but index %s is %d",
- N, index.getLabel(), index.getTupleLength())) ;
+ if (N != index.getTupleLength())
+ throw new TDBException(format("Inconsistent: TupleTable width is %d but index %s is %d",
+ N, index.getLabel(), index.getTupleLength())) ;
}
this.conPolicy = conPolicy ;
this.tupleTable = new TupleTable(N, indexes) ;
this.nodeTable = nodeTable ;
+ this.readOnly = false ;
}
private void startWrite()
- { conPolicy.startUpdate() ; }
+ {
+ if ( readOnly )
+ throw new TDBException("read only") ;
+ conPolicy.startUpdate() ;
+ }
private void finishWrite()
{ conPolicy.finishUpdate() ; }
@@ -205,6 +213,12 @@ public class NodeTupleTableConcrete impl
}
@Override
+ public boolean isReadOnly() { return readOnly ; }
+
+ @Override
+ public void setReadOnly(boolean mode) { readOnly = mode ; }
+
+ @Override
public boolean isEmpty()
{
return tupleTable.isEmpty() ;
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableView.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableView.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableView.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableView.java Thu Jul 7 15:26:17 2011
@@ -15,13 +15,14 @@ import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.tdb.index.TupleTable ;
import com.hp.hpl.jena.tdb.store.NodeId ;
-/** Read-only projection of another NodeTupleTable.
+/** (Read-only?) projection of another NodeTupleTable.
* This will not reduce a N-wide tuple to N-1 when find*() used.
*/
public class NodeTupleTableView extends NodeTupleTableWrapper
{
private Node prefix ;
private NodeId prefixId ;
+ //private boolean readOnly = false ;
public NodeTupleTableView(NodeTupleTable ntt, Node prefix)
{
@@ -80,8 +81,11 @@ public class NodeTupleTableView extends
return nodeTupleTable.findAsNodeIds(nodes) ;
}
-// public NodeTable getNodeTable()
-// { return nodeTupleTable.getNodeTable() ; }
+// @Override
+// public boolean isReadOnly() { return readOnly ; }
+//
+// @Override
+// public void setReadOnly(boolean mode) { readOnly = mode ; }
@Override
public TupleTable getTupleTable()
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableWrapper.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableWrapper.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableWrapper.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableWrapper.java Thu Jul 7 15:26:17 2011
@@ -68,6 +68,14 @@ public class NodeTupleTableWrapper imple
{ return nodeTupleTable.getTupleTable() ; }
@Override
+ public boolean isReadOnly()
+ { return nodeTupleTable.isReadOnly() ; }
+
+ @Override
+ public void setReadOnly(boolean mode)
+ { nodeTupleTable.setReadOnly(mode) ; }
+
+ @Override
public boolean isEmpty()
{ return nodeTupleTable.isEmpty() ; }
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetGraphTDB.java Thu Jul 7 15:26:17 2011
@@ -44,6 +44,7 @@ public class DatasetGraphTDB extends Dat
private GraphTDB effectiveDefaultGraph ;
private boolean closed = false ;
+ private boolean readOnly = false ;
public DatasetGraphTDB(TripleTable tripleTable, QuadTable quadTable, DatasetPrefixStorage prefixes,
ReorderTransformation transform, StoreConfig config)
@@ -67,7 +68,16 @@ public class DatasetGraphTDB extends Dat
}
public QuadTable getQuadTable() { return quadTable ; }
- public TripleTable getTripleTable() { return tripleTable ; }
+ public TripleTable getTripleTable() { return tripleTable ; }
+
+ public boolean isReadOnly() { return readOnly ; }
+ public void setReadOnly(boolean mode)
+ {
+ tripleTable.setReadOnly(mode) ;
+ quadTable.setReadOnly(mode) ;
+
+ ((DatasetPrefixesTDB)prefixes).setReadOnly(mode) ;
+ }
// private Lock lock = new MRSWLite() ;
// @Override
@@ -220,7 +230,6 @@ public class DatasetGraphTDB extends Dat
}
} ;
-
@Override
public Iterator<Node> listGraphNodes()
{
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetPrefixesTDB.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetPrefixesTDB.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetPrefixesTDB.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/DatasetPrefixesTDB.java Thu Jul 7 15:26:17 2011
@@ -97,6 +97,9 @@ public class DatasetPrefixesTDB implemen
/** Testing - dataset prefixes in-memory */
public static DatasetPrefixesTDB testing() { return new DatasetPrefixesTDB() ; }
+
+ public boolean isReadOnly() { return nodeTupleTable.isReadOnly() ; }
+ public void setReadOnly(boolean mode) { nodeTupleTable.setReadOnly(mode) ; }
@Override
public synchronized void insertPrefix(String graphName, String prefix, String uri)
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/QuadTable.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/QuadTable.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/QuadTable.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/QuadTable.java Thu Jul 7 15:26:17 2011
@@ -12,8 +12,6 @@ import java.util.Iterator ;
import org.openjena.atlas.iterator.NullIterator ;
import org.openjena.atlas.iterator.Transform ;
-import org.openjena.atlas.lib.Closeable ;
-import org.openjena.atlas.lib.Sync ;
import org.openjena.atlas.lib.Tuple ;
import com.hp.hpl.jena.graph.Node ;
@@ -22,8 +20,6 @@ import com.hp.hpl.jena.sparql.core.Quad
import com.hp.hpl.jena.tdb.index.TupleIndex ;
import com.hp.hpl.jena.tdb.lib.TupleLib ;
import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
-import com.hp.hpl.jena.tdb.nodetable.NodeTupleTable ;
-import com.hp.hpl.jena.tdb.nodetable.NodeTupleTableConcrete ;
import com.hp.hpl.jena.tdb.sys.ConcurrencyPolicy ;
@@ -31,14 +27,11 @@ import com.hp.hpl.jena.tdb.sys.Concurren
* together with a node table.
*/
-public class QuadTable implements Sync, Closeable
+public class QuadTable extends TableBase
{
- final private NodeTupleTable table ;
- private boolean syncNeeded = false ;
-
public QuadTable(TupleIndex[] indexes, NodeTable nodeTable, ConcurrencyPolicy policy)
{
- table = new NodeTupleTableConcrete(4, indexes, nodeTable, policy);
+ super(4, indexes, nodeTable, policy);
}
/** Add a quad - return true if it was added, false if it already existed */
@@ -99,35 +92,10 @@ public class QuadTable implements Sync,
{
return new Quad(item.get(0), item.get(1), item.get(2), item.get(3)) ;
}} ;
-
-
- public NodeTupleTable getNodeTupleTable() { return table ; }
-
- @Override
- public void sync()
- {
- if ( syncNeeded )
- table.sync() ;
- syncNeeded = false ;
- }
-
-
- public boolean isEmpty() { return table.isEmpty() ; }
-
- @Override
- public void close()
- { table.close() ; }
/** Clear - does not clear the associated node tuple table */
public void clearQuads()
{ table.clear() ; }
-
-// /** Clear - including the associated node tuple table */
-// public void clear()
-// {
-// table.getTupleTable().clear() ;
-// table.getNodeTable().clear() ;
-// }
}
/*
Added: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TableBase.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TableBase.java?rev=1143883&view=auto
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TableBase.java (added)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TableBase.java Thu Jul 7 15:26:17 2011
@@ -0,0 +1,66 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hp.hpl.jena.tdb.store;
+
+import org.openjena.atlas.lib.Closeable ;
+import org.openjena.atlas.lib.Sync ;
+
+import com.hp.hpl.jena.tdb.index.TupleIndex ;
+import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
+import com.hp.hpl.jena.tdb.nodetable.NodeTupleTable ;
+import com.hp.hpl.jena.tdb.nodetable.NodeTupleTableConcrete ;
+import com.hp.hpl.jena.tdb.sys.ConcurrencyPolicy ;
+
+public class TableBase implements Sync, Closeable
+{
+ final protected NodeTupleTable table ;
+ protected boolean syncNeeded = false ;
+
+ protected TableBase(int N, TupleIndex[] indexes, NodeTable nodeTable, ConcurrencyPolicy policy)
+ {
+ table = new NodeTupleTableConcrete(N, indexes, nodeTable, policy) ;
+ }
+
+ public NodeTupleTable getNodeTupleTable() { return table ; }
+
+ public void setReadOnly(boolean mode) { table.setReadOnly(mode) ; }
+
+// /** Clear - including the associated node tuple table */
+// public void clear()
+// {
+// table.getTupleTable().clear() ;
+// table.getNodeTable().clear() ;
+// }
+
+ @Override
+ public void sync()
+ {
+ if ( syncNeeded )
+ table.sync() ;
+ syncNeeded = false ;
+ }
+
+ @Override
+ public void close()
+ { table.close() ; }
+
+ public boolean isEmpty() { return table.isEmpty() ; }
+
+}
+
Propchange: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TableBase.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TripleTable.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TripleTable.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TripleTable.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/store/TripleTable.java Thu Jul 7 15:26:17 2011
@@ -12,8 +12,6 @@ import java.util.Iterator ;
import org.openjena.atlas.iterator.NullIterator ;
import org.openjena.atlas.iterator.Transform ;
-import org.openjena.atlas.lib.Closeable ;
-import org.openjena.atlas.lib.Sync ;
import org.openjena.atlas.lib.Tuple ;
import com.hp.hpl.jena.graph.Node ;
@@ -21,8 +19,6 @@ import com.hp.hpl.jena.graph.Triple ;
import com.hp.hpl.jena.tdb.index.TupleIndex ;
import com.hp.hpl.jena.tdb.lib.TupleLib ;
import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
-import com.hp.hpl.jena.tdb.nodetable.NodeTupleTable ;
-import com.hp.hpl.jena.tdb.nodetable.NodeTupleTableConcrete ;
import com.hp.hpl.jena.tdb.sys.ConcurrencyPolicy ;
@@ -33,15 +29,12 @@ import com.hp.hpl.jena.tdb.sys.Concurren
* The node table form can map to and from NodeIds (longs)
*/
-public class TripleTable implements Sync, Closeable
+public class TripleTable extends TableBase
{
- final NodeTupleTable table ;
- private boolean syncNeeded = false ;
-
public TripleTable(TupleIndex[] indexes, NodeTable nodeTable, ConcurrencyPolicy policy)
{
- table = new NodeTupleTableConcrete(3, indexes, nodeTable, policy) ;
-
+ super(3, indexes, nodeTable, policy) ;
+ //table = new NodeTupleTableConcrete(3, indexes, nodeTable, policy) ;
}
public boolean add( Triple triple )
@@ -86,33 +79,10 @@ public class TripleTable implements Sync
{
return new Triple(item.get(0), item.get(1), item.get(2)) ;
}} ;
-
- public NodeTupleTable getNodeTupleTable() { return table ; }
-
- @Override
- public void sync()
- {
- if ( syncNeeded )
- table.sync() ;
- syncNeeded = false ;
- }
-
- @Override
- public void close()
- { table.close() ; }
-
- public boolean isEmpty() { return table.isEmpty() ; }
-
+
/** Clear - does not clear the associated node tuple table */
public void clearTriples()
{ table.clear() ; }
-
-// /** Clear - including the associated node tuple table */
-// public void clear()
-// {
-// table.getTupleTable().clear() ;
-// table.getNodeTable().clear() ;
-// }
}
/*
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/CachingTDBMaker.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/CachingTDBMaker.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/CachingTDBMaker.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/CachingTDBMaker.java Thu Jul 7 15:26:17 2011
@@ -74,7 +74,7 @@ public final class CachingTDBMaker imple
String absPath = location.getDirectoryPath() ;
if ( ! cache.containsKey(absPath) )
- if ( ! absPath.equals(Names.memName) )
+ if ( ! location.isMem() )
// Don't worry if a dataset in-memory is cached or not.
log.warn("Not a cached location: "+absPath) ;
log.debug("Remove from dataset cache: "+absPath) ;
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/Names.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/Names.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/Names.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/sys/Names.java Thu Jul 7 15:26:17 2011
@@ -32,7 +32,8 @@ public class Names
/** Node file */
public static final String extNodeData = "dat" ; // Extension of node files
public static final String extJournal = "jrnl" ; // Extension of node files.
- public static final String journalFile = "journal"+"."+extJournal ;
+ public static final String journalFileBase = "journal" ;
+ public static final String journalFile = journalFileBase+"."+extJournal ;
public static final String indexId2Node = "nodes" ; // Node table
public static final String indexNode2Id = "node2id"; // Node hash to id table
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=1143883&r1=1143882&r2=1143883&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 Thu Jul 7 15:26:17 2011
@@ -51,7 +51,7 @@ public class BlockMgrJournal implements
@Override
public void commit(Transaction txn)
{
- log.info("Commit {} {}", fileRef.getFilename(), writeBlocks.size()) ;
+ //log.info("Commit {} {}", fileRef.getFilename(), writeBlocks.size()) ;
for ( Block blk : writeBlocks.values() )
writeJournalEntry(blk) ;
}
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=1143883&r1=1143882&r2=1143883&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 Thu Jul 7 15:26:17 2011
@@ -59,6 +59,9 @@ public class DatasetBuilderTxn
DatasetBuilderStd x = new DatasetBuilderStd(blockMgrBuilder, nodeTableBuilder) ;
DatasetGraphTDB dsg2 = x.build(dsg.getLocation(), dsg.getConfig().properties) ;
+
+ dsg.setReadOnly(true) ;
+
return new DatasetGraphTxnTDB(dsg2, txn) ;
}
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=1143883&r1=1143882&r2=1143883&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 Thu Jul 7 15:26:17 2011
@@ -195,6 +195,13 @@ class Journal implements Iterable<Journa
@Override
public void close() { channel.close() ; }
+
+ public void truncate() { truncate(0) ; }
+
+ private void truncate(long posn)
+ {
+ channel.truncate(posn) ;
+ }
}
/*
Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java?rev=1143883&r1=1143882&r2=1143883&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java Thu Jul 7 15:26:17 2011
@@ -48,7 +48,6 @@ public class NodeTableTrans implements N
public NodeTableTrans(NodeTable sub, Index nodeIndex, ObjectFile journal)
{
this.base = sub ;
-
this.nodeIndex = nodeIndex ;
this.journal = journal ;
nodeTableJournal = new NodeTableNative(nodeIndex, journal) ;
@@ -157,14 +156,22 @@ public class NodeTableTrans implements N
throw new TDBTransactionException("Not in a transaction for a commit to happen") ;
append() ;
base.sync() ;
- //other.reposition(0) ;
- passthrough = true ;
+ clearUp() ;
}
@Override
public void abort(Transaction txn)
{
-// other.reposition(0) ;
+ clearUp() ;
+ }
+
+ private void clearUp()
+ {
+ passthrough = true ;
+ //nodeIndex ;
+ journal.reposition(0) ;
+ journal.close() ;
+ nodeTableJournal = null ;
}
@Override
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=1143883&r1=1143882&r2=1143883&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 Thu Jul 7 15:26:17 2011
@@ -13,7 +13,6 @@ import java.util.List ;
import com.hp.hpl.jena.tdb.sys.FileRef ;
-
/** A transaction handle */
public class Transaction
{
@@ -22,6 +21,8 @@ public class Transaction
private final TransactionManager txnMgr ;
private final List<Iterator<?>> iterators ;
private Journal journal = null ;
+ private enum State { ACTIVE, COMMITED, ABORTED }
+ private State state ;
private final List<NodeTableTrans> nodeTableTrans = new ArrayList<NodeTableTrans>() ;
private final List<BlockMgrJournal> blkMgrs = new ArrayList<BlockMgrJournal>() ;
@@ -32,10 +33,14 @@ public class Transaction
this.txnMgr = txnMgr ;
//this.journal = journal ;
this.iterators = new ArrayList<Iterator<?>>() ;
+ state = State.ACTIVE ;
}
public void commit()
{
+ if ( state != State.ACTIVE )
+ throw new TDBTransactionException("Transaction has already committed or aborted") ;
+
for ( BlockMgrJournal x : blkMgrs )
x.commit(this) ;
@@ -49,12 +54,18 @@ public class Transaction
public void abort()
{
+ if ( state != State.ACTIVE )
+ throw new TDBTransactionException("Transaction has already committed or aborted") ;
+
+ journal.truncate() ;
+
// Clearup.
for ( BlockMgrJournal x : blkMgrs )
x.abort(this) ;
for ( NodeTableTrans x : nodeTableTrans )
x.abort(this) ;
+
}
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=1143883&r1=1143882&r2=1143883&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 Thu Jul 7 15:26:17 2011
@@ -9,6 +9,8 @@ package com.hp.hpl.jena.tdb.transaction;
import java.util.Iterator ;
+import com.hp.hpl.jena.query.DataSource ;
+import com.hp.hpl.jena.query.Dataset ;
import com.hp.hpl.jena.sparql.core.DatasetGraph ;
import com.hp.hpl.jena.tdb.TDBException ;
import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
@@ -19,6 +21,18 @@ public class TransactionManager
{
static long transactionId = 10 ;
+ public static DataSource begin(Dataset ds)
+ {
+ return null ;
+ }
+
+ public static DataSource commit(Dataset ds)
+ {
+ return null ;
+ }
+
+
+
public TransactionManager()
{
}