You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by aj...@apache.org on 2017/02/14 14:40:04 UTC
[49/50] jena git commit: More tests,
renaming central type more accurately
More tests, renaming central type more accurately
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/ade1e941
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/ade1e941
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/ade1e941
Branch: refs/heads/ThreadPerGraphDataset
Commit: ade1e9418e6cec37ffaf710e4b50024449025864
Parents: 2727c6b
Author: ajs6f <aj...@virginia.edu>
Authored: Sun Jan 8 11:56:09 2017 -0500
Committer: ajs6f <aj...@virginia.edu>
Committed: Tue Feb 14 09:39:04 2017 -0500
----------------------------------------------------------------------
.../sparql/core/DatasetGraphGraphPerTxn.java | 355 +++++++++++++++++++
.../core/DatasetGraphPerGraphLocking.java | 318 -----------------
.../sparql/core/assembler/AssemblerUtils.java | 2 +-
.../assembler/GraphPerTxnDatasetAssembler.java | 96 +++++
.../WriterPerGraphDatasetAssembler.java | 96 -----
.../java/org/apache/jena/sparql/TC_General.java | 4 +-
.../jena/sparql/core/pergraph/BasicTest.java | 4 +-
.../sparql/core/pergraph/FindPatternsTest.java | 4 +-
.../jena/sparql/core/pergraph/FindTest.java | 4 +-
.../jena/sparql/core/pergraph/LockTest.java | 4 +-
.../core/pergraph/MultithreadingTest.java | 59 ++-
.../pergraph/TS_DatasetGraphGraphPerTxn.java | 28 ++
.../TS_DatasetGraphPerGraphLocking.java | 28 --
.../core/pergraph/TransactionLifecycleTest.java | 4 +-
.../jena/sparql/core/pergraph/ViewTest.java | 4 +-
15 files changed, 538 insertions(+), 472 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphGraphPerTxn.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphGraphPerTxn.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphGraphPerTxn.java
new file mode 100644
index 0000000..3476f6f
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphGraphPerTxn.java
@@ -0,0 +1,355 @@
+/*
+ * 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 org.apache.jena.sparql.core;
+
+import static java.util.stream.Collectors.toList;
+import static org.apache.jena.atlas.iterator.Iter.filter;
+import static org.apache.jena.graph.GraphUtil.addInto;
+import static org.apache.jena.query.ReadWrite.READ;
+import static org.apache.jena.query.ReadWrite.WRITE;
+import static org.apache.jena.sparql.core.Quad.defaultGraphIRI;
+import static org.apache.jena.sparql.core.Quad.isDefaultGraph;
+import static org.apache.jena.util.iterator.WrappedIterator.createNoRemove;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.function.Consumer;
+
+import org.apache.jena.graph.Graph;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.graph.impl.GraphBase;
+import org.apache.jena.query.ReadWrite;
+import org.apache.jena.sparql.JenaTransactionException;
+import org.apache.jena.sparql.core.mem.TransactionalComponent;
+import org.apache.jena.sparql.core.mem.TriTable;
+import org.apache.jena.util.iterator.ExtendedIterator;
+
+public class DatasetGraphGraphPerTxn extends DatasetGraphCollection {
+
+ private final Map<Node, LockableGraph> graphs = new ConcurrentHashMap<>();
+
+ /**
+ * The graph being used as part of a WRITE transaction.
+ */
+ private final ThreadLocal<LockableGraph> graphInTransaction = new ThreadLocal<>();
+
+ private LockableGraph graphInTransaction() {
+ return graphInTransaction.get();
+ }
+
+ private final ThreadLocal<ReadWrite> transactionType = new ThreadLocal<>();
+
+ private ReadWrite transactionType() {
+ return transactionType.get();
+ }
+
+ @Override
+ public Iterator<Node> listGraphNodes() {
+ return filter(graphs.keySet().iterator(), gn -> !isDefaultGraph(gn));
+ }
+
+ @Override
+ public boolean supportsTransactions() {
+ return true;
+ }
+
+ @Override
+ public boolean isInTransaction() {
+ return transactionType() != null;
+ }
+
+ @Override
+ public void begin(ReadWrite readWrite) {
+ if (isInTransaction()) throw new JenaTransactionException("Cannot nest transactions!");
+ transactionType.set(readWrite);
+ }
+
+ private void actOnGraphInTransaction(Consumer<LockableGraph> action) {
+ if (graphInTransaction() != null) action.accept(graphInTransaction());
+ }
+
+ @Override
+ public void commit() {
+ if (!isInTransaction()) throw new JenaTransactionException("Cannot commit outside a transaction!");
+ actOnGraphInTransaction(LockableGraph::commit);
+ cleanAfterTransaction();
+ }
+
+ @Override
+ public void abort() {
+ if (!isInTransaction()) throw new JenaTransactionException("Cannot abort outside a transaction!");
+ actOnGraphInTransaction(LockableGraph::abort);
+ cleanAfterTransaction();
+ }
+
+ @Override
+ public void end() {
+ cleanAfterTransaction();
+ }
+
+ private void cleanAfterTransaction() {
+ graphInTransaction.remove();
+ transactionType.remove();
+ }
+
+ @Override
+ public Graph getDefaultGraph() {
+ return getGraph(defaultGraphIRI);
+ }
+
+ @Override
+ public void setDefaultGraph(final Graph g) {
+ addGraph(defaultGraphIRI, g);
+ }
+
+ @Override
+ public void add(Quad quad) {
+ mutate(super::add, quad);
+ }
+
+ @Override
+ public void delete(Quad quad) {
+ mutate(super::delete, quad);
+ }
+
+ @Override
+ public void addGraph(Node graphName, Graph triples) {
+ wholeGraphAction(graphName, g -> addInto(getGraph(g), triples));
+ }
+
+ @Override
+ public void removeGraph(Node graphName) {
+ wholeGraphAction(graphName, graphs::remove);
+ }
+
+ /**
+ * Perform an action on a graph after clearing it.
+ *
+ * @param graphName the graph to mutate
+ * @param action the action to take with that whole graph
+ */
+ private void wholeGraphAction(Node graphName, Consumer<Node> action) {
+ mutate(gN -> {
+ getGraph(gN).clear();
+ action.accept(gN);
+ }, graphName, graphName);
+ }
+
+ private void mutate(Consumer<Quad> action, Quad quad) {
+ mutate(action, quad, quad.getGraph());
+ }
+
+ /**
+ * Take an action inside a transaction for a given graph. Assumes that {@code action} and {@code payload} are
+ * appropriately related to {@code graphName}.
+ *
+ * @param action action to take
+ * @param payload payload for action
+ * @param graphName graph with which to act
+ */
+ private <T> void mutate(Consumer<T> action, T payload, Node graphName) {
+ if (isInTransaction()) {
+ switch (transactionType()) {
+ case READ:
+ throw new JenaTransactionException("Cannot write during a READ transaction!");
+ case WRITE:
+ // are we trying to mutate the current graph-in-hand?
+ if (graphInTransaction() != null && graphName.equals(graphInTransaction().graphName()))
+ action.accept(payload);
+ // are we starting work with a newly-chosen graph?
+ else if (graphInTransaction() == null) {
+ LockableGraph graph = graphs.computeIfAbsent(graphName, LockableGraph::new);
+ graph.begin(transactionType());
+ graphInTransaction.set(graph);
+ action.accept(payload);
+ } else // we already have a different graph in hand and cannot use another!
+ throw new JenaTransactionRegionException("Cannot work with more than one graph per transaction!");
+ }
+
+ }
+ // we must work without a transaction
+ action.accept(payload);
+ }
+
+ @Override
+ public void clear() {
+ if (!isInTransaction()) _clear(graphs.values());
+ else switch (transactionType()) {
+ case READ:
+ throw new JenaTransactionException("Cannot clear during a READ transaction!");
+ case WRITE:
+ // avoid trying to nest a transaction on a graph we may have in hand
+ _clear(graphs.values().stream().filter(g -> !g.equals(graphInTransaction())).collect(toList()));
+ actOnGraphInTransaction(LockableGraph::clear);
+ }
+
+ }
+
+ private static void _clear(Collection<LockableGraph> graphs) {
+ try {
+ graphs.forEach(LockableGraph::beginWrite);
+ graphs.forEach(LockableGraph::clear);
+ graphs.forEach(LockableGraph::commit);
+ } finally {
+ graphs.forEach(LockableGraph::end);
+ }
+ }
+
+ @Override
+ public Graph getGraph(final Node graphName) {
+ return graphs.computeIfAbsent(graphName, LockableGraph::new);
+ }
+
+ /**
+ * A graph with a distinguished node, which we use as a name.
+ */
+ private abstract static class PointedGraph extends GraphBase {
+
+ private final Node distinguishedNode;
+
+ public PointedGraph(Node graphName) {
+ this.distinguishedNode = graphName;
+ }
+
+ public Node graphName() {
+ return distinguishedNode;
+ }
+ }
+
+ /**
+ * A {@link PointedGraph} that features a write-lock and supports transactions. If a mutation is made outside a
+ * transaction, it is auto-wrapped in a transaction.
+ */
+ private static class LockableGraph extends PointedGraph implements TransactionalComponent {
+
+ public LockableGraph(Node graphName) {
+ super(graphName);
+ }
+
+ /**
+ * We permit only one concurrent writer per named graph.
+ */
+ private final Lock writeLock = new ReentrantLock(true);
+
+ private final ThreadLocal<ReadWrite> currentTransactionType = new ThreadLocal<>();
+
+ private ReadWrite currentTransactionType() {
+ return currentTransactionType.get();
+ }
+
+ private final TriTable table = new TriTable();
+
+ @Override
+ protected ExtendedIterator<Triple> graphBaseFind(Triple t) {
+ if (currentTransactionType() == null) {
+ begin(READ);
+ try {
+ return _find(t);
+ } finally {
+ end();
+ }
+ }
+ return _find(t);
+ }
+
+ /**
+ * Must be called inside a transaction!
+ *
+ * @param t the triple-pattern to search
+ * @return matches from the in-transaction table
+ */
+ private ExtendedIterator<Triple> _find(Triple t) {
+ return createNoRemove(table.find(t.getSubject(), t.getPredicate(), t.getObject()).iterator());
+ }
+
+ @Override
+ public void performAdd(Triple t) {
+ performMutation(t, table::add);
+ }
+
+ @Override
+ public void performDelete(Triple t) {
+ performMutation(t, table::delete);
+ }
+
+ private void performMutation(Triple t, Consumer<Triple> action) {
+ final ReadWrite readWrite = currentTransactionType();
+ if (readWrite == null) {
+ begin(WRITE);
+ try {
+ action.accept(t);
+ commit();
+ } finally {
+ end();
+ }
+ } else switch (readWrite) {
+ case READ:
+ throw new JenaTransactionException("Cannot write during a READ transaction!");
+ case WRITE:
+ action.accept(t);
+ }
+ }
+
+ @Override
+ protected int graphBaseSize() {
+ // TODO make this efficient, somehow
+ return super.graphBaseSize();
+ }
+
+ @Override
+ public void begin(ReadWrite readWrite) {
+ if (currentTransactionType() != null) throw new JenaTransactionException("Cannot nest transactions!");
+ switch (readWrite) {
+ case WRITE:
+ writeLock.lock();
+ default:
+ currentTransactionType.set(readWrite);
+ table.begin(readWrite);
+ }
+ }
+
+ public void beginWrite() {
+ begin(WRITE);
+ }
+
+ @Override
+ public void commit() {
+ table.commit();
+ finishTransaction();
+ }
+
+ @Override
+ public void abort() {
+ table.abort();
+ finishTransaction();
+ }
+
+ @Override
+ public void end() {
+ table.end();
+ finishTransaction();
+ }
+
+ private void finishTransaction() {
+ final ReadWrite readWrite = currentTransactionType();
+ currentTransactionType.remove();
+ if (WRITE.equals(readWrite)) writeLock.unlock();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphPerGraphLocking.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphPerGraphLocking.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphPerGraphLocking.java
deleted file mode 100644
index 9c0b6cc..0000000
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphPerGraphLocking.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * 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 org.apache.jena.sparql.core;
-
-import static java.util.stream.Collectors.toList;
-import static org.apache.jena.atlas.iterator.Iter.filter;
-import static org.apache.jena.graph.GraphUtil.addInto;
-import static org.apache.jena.query.ReadWrite.READ;
-import static org.apache.jena.query.ReadWrite.WRITE;
-import static org.apache.jena.sparql.core.Quad.defaultGraphIRI;
-import static org.apache.jena.sparql.core.Quad.isDefaultGraph;
-import static org.apache.jena.util.iterator.WrappedIterator.createNoRemove;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.function.Consumer;
-
-import org.apache.jena.graph.Graph;
-import org.apache.jena.graph.Node;
-import org.apache.jena.graph.Triple;
-import org.apache.jena.graph.impl.GraphBase;
-import org.apache.jena.query.ReadWrite;
-import org.apache.jena.sparql.JenaTransactionException;
-import org.apache.jena.sparql.core.mem.TransactionalComponent;
-import org.apache.jena.sparql.core.mem.TriTable;
-import org.apache.jena.util.iterator.ExtendedIterator;
-
-public class DatasetGraphPerGraphLocking extends DatasetGraphCollection {
-
- private final Map<Node, LockableGraph> graphs = new ConcurrentHashMap<>();
-
- private final ThreadLocal<LockableGraph> graphInTransaction = new ThreadLocal<>();
-
- private LockableGraph graphInTransaction() {
- return graphInTransaction.get();
- }
-
- private final ThreadLocal<ReadWrite> transactionType = new ThreadLocal<>();
-
- private ReadWrite transactionType() {
- return transactionType.get();
- }
-
- @Override
- public Iterator<Node> listGraphNodes() {
- return filter(graphs.keySet().iterator(), gn -> !isDefaultGraph(gn));
- }
-
- @Override
- public boolean supportsTransactions() {
- return true;
- }
-
- @Override
- public boolean isInTransaction() {
- return transactionType() != null;
- }
-
- @Override
- public void begin(ReadWrite readWrite) {
- if (isInTransaction()) throw new JenaTransactionException("Cannot nest transactions!");
- transactionType.set(readWrite);
- }
-
- private void graphAction(Consumer<LockableGraph> action) {
- if (graphInTransaction() != null) action.accept(graphInTransaction());
- }
-
- @Override
- public void commit() {
- if (!isInTransaction()) throw new JenaTransactionException("Cannot commit outside a transaction!");
- graphAction(LockableGraph::commit);
- cleanAfterTransaction();
- }
-
- @Override
- public void abort() {
- if (!isInTransaction()) throw new JenaTransactionException("Cannot abort outside a transaction!");
- graphAction(LockableGraph::abort);
- cleanAfterTransaction();
- }
-
- @Override
- public void end() {
- cleanAfterTransaction();
- }
-
- private void cleanAfterTransaction() {
- graphInTransaction.remove();
- transactionType.remove();
- }
-
- @Override
- public Graph getDefaultGraph() {
- return getGraph(defaultGraphIRI);
- }
-
- @Override
- public void setDefaultGraph(final Graph g) {
- addGraph(defaultGraphIRI, g);
- }
-
- @Override
- public Graph getGraph(final Node graphName) {
- if (isInTransaction()) {
- // are we using the current graph?
- if (graphInTransaction() != null && graphName.equals(graphInTransaction().graphName()))
- return graphInTransaction();
- // are we starting work with a graph?
- if (graphInTransaction() == null) {
- LockableGraph graph = graphs.computeIfAbsent(graphName, LockableGraph::new);
- graph.begin(transactionType());
- graphInTransaction.set(graph);
- return graph;
- }
- // we already have a graph in hand and cannot use another!
- throw new JenaTransactionRegionException("Cannot work with more than one graph per transaction!");
- }
- // we must work without a transaction
- return graphs.computeIfAbsent(graphName, LockableGraph::new);
- }
-
- @Override
- public void clear() {
- if (!isInTransaction()) _clear(graphs.values());
- else switch (transactionType()) {
- case READ:
- throw new JenaTransactionException("Cannot clear during a READ transaction!");
- case WRITE:
- // avoid trying to nest a transaction on a graph we may have in hand
- _clear(graphs.values().stream().filter(g -> !g.equals(graphInTransaction())).collect(toList()));
- graphAction(LockableGraph::clear);
- }
-
- }
-
- private static void _clear(Collection<LockableGraph> graphs) {
- try {
- graphs.forEach(LockableGraph::beginWrite);
- graphs.forEach(LockableGraph::clear);
- graphs.forEach(LockableGraph::commit);
- } finally {
- graphs.forEach(LockableGraph::end);
- }
- }
-
- @Override
- public void addGraph(Node graphName, Graph triples) {
- wholeGraphAction(graphName, g -> addInto(getGraph(g), triples));
- }
-
- @Override
- public void removeGraph(Node graphName) {
- wholeGraphAction(graphName, graphs::remove);
- }
-
- private void wholeGraphAction(Node graphName, Consumer<Node> action) {
- getGraph(graphName).clear();
- action.accept(graphName);
- }
-
- /**
- * A graph with a distinguished node, which we use as a name.
- */
- private abstract static class PointedGraph extends GraphBase {
-
- private final Node distinguishedNode;
-
- public PointedGraph(Node graphName) {
- this.distinguishedNode = graphName;
- }
-
- public Node graphName() {
- return distinguishedNode;
- }
- }
-
- /**
- * A {@link PointedGraph} that features a write-lock and supports transactions. If a mutation is made outside a
- * transaction, it is auto-wrapped in a transaction.
- */
- private static class LockableGraph extends PointedGraph implements TransactionalComponent {
-
- public LockableGraph(Node graphName) {
- super(graphName);
- }
-
- /**
- * We permit only one concurrent writer per named graph.
- */
- private final Lock writeLock = new ReentrantLock(true);
-
- private final ThreadLocal<ReadWrite> currentTransactionType = new ThreadLocal<>();
-
- private ReadWrite currentTransactionType() {
- return currentTransactionType.get();
- }
-
- private final TriTable table = new TriTable();
-
- @Override
- protected ExtendedIterator<Triple> graphBaseFind(Triple t) {
- if (currentTransactionType() == null) {
- begin(READ);
- try {
- return _find(t);
- } finally {
- end();
- }
- }
- return _find(t);
- }
-
- /**
- * Must be called inside a transaction!
- *
- * @param t the triple-pattern to search
- * @return matches from the in-transaction table
- */
- private ExtendedIterator<Triple> _find(Triple t) {
- return createNoRemove(table.find(t.getSubject(), t.getPredicate(), t.getObject()).iterator());
- }
-
- @Override
- public void performAdd(Triple t) {
- performMutation(t, table::add);
- }
-
- @Override
- public void performDelete(Triple t) {
- performMutation(t, table::delete);
- }
-
- private void performMutation(Triple t, Consumer<Triple> action) {
- final ReadWrite readWrite = currentTransactionType();
- if (readWrite == null) {
- begin(WRITE);
- try {
- action.accept(t);
- commit();
- } finally {
- end();
- }
- } else switch (readWrite) {
- case READ:
- throw new JenaTransactionException("Cannot write during a READ transaction!");
- case WRITE:
- action.accept(t);
- }
- }
-
- @Override
- protected int graphBaseSize() {
- // TODO make this efficient, somehow
- return super.graphBaseSize();
- }
-
- @Override
- public void begin(ReadWrite readWrite) {
- if (currentTransactionType() != null) throw new JenaTransactionException("Cannot nest transactions!");
- switch (readWrite) {
- case WRITE:
- writeLock.lock();
- default:
- currentTransactionType.set(readWrite);
- table.begin(readWrite);
- }
- }
-
- public void beginWrite() {
- begin(WRITE);
- }
-
- @Override
- public void commit() {
- table.commit();
- finishTransaction();
- }
-
- @Override
- public void abort() {
- table.abort();
- finishTransaction();
- }
-
- @Override
- public void end() {
- table.end();
- finishTransaction();
- }
-
- private void finishTransaction() {
- final ReadWrite readWrite = currentTransactionType();
- currentTransactionType.remove();
- if (WRITE.equals(readWrite)) writeLock.unlock();
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
index d124393..e62f50e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java
@@ -60,7 +60,7 @@ public class AssemblerUtils
registerDataset(DatasetAssembler.getType(), new DatasetAssembler()) ;
TxnInMemDatasetAssembler txnInMemDatasetAssembler = new TxnInMemDatasetAssembler();
registerDataset(txnInMemDatasetAssembler.getType(), txnInMemDatasetAssembler);
- WriterPerGraphDatasetAssembler writerPerGraphDatasetAssembler = new WriterPerGraphDatasetAssembler();
+ GraphPerTxnDatasetAssembler writerPerGraphDatasetAssembler = new GraphPerTxnDatasetAssembler();
registerDataset(writerPerGraphDatasetAssembler.getType(), writerPerGraphDatasetAssembler);
}
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/GraphPerTxnDatasetAssembler.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/GraphPerTxnDatasetAssembler.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/GraphPerTxnDatasetAssembler.java
new file mode 100644
index 0000000..8218173
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/GraphPerTxnDatasetAssembler.java
@@ -0,0 +1,96 @@
+/*
+ * 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 org.apache.jena.sparql.core.assembler;
+
+import static java.util.concurrent.Executors.newFixedThreadPool;
+import static org.apache.jena.assembler.JA.data;
+import static org.apache.jena.query.ReadWrite.WRITE;
+import static org.apache.jena.riot.RDFDataMgr.read;
+import static org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab.pGraphName;
+import static org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab.pNamedGraph;
+import static org.apache.jena.sparql.util.graph.GraphUtils.getAsStringValue;
+import static org.apache.jena.sparql.util.graph.GraphUtils.getResourceValue;
+import static org.apache.jena.sparql.util.graph.GraphUtils.multiValueResource;
+
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.function.Consumer;
+
+import org.apache.jena.assembler.Assembler;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.DatasetFactory;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.shared.JenaException;
+import org.apache.jena.sparql.core.DatasetGraphGraphPerTxn;
+
+/**
+ * An {@link Assembler} that creates writer-per-graph in-memory {@link Dataset}s.
+ */
+public class GraphPerTxnDatasetAssembler extends TransactionalInMemDatasetAssembler {
+
+ @Override
+ public Resource getType() {
+ return DatasetAssemblerVocab.tDatasetPGraphWriter;
+ }
+
+ @Override
+ public Dataset createDataset() {
+ return DatasetFactory.wrap(new DatasetGraphGraphPerTxn());
+ }
+
+ @Override
+ protected void loadNamedGraphs(Resource root, Dataset dataset) {
+ List<Resource> namedGraphs = multiValueResource(root, pNamedGraph);
+ Resource parallelizeValue = getResourceValue(root, DatasetAssemblerVocab.pParallelize);
+ // defaults to false
+ boolean parallelize = parallelizeValue != null ? parallelizeValue.asLiteral().getBoolean() : false;
+ if (parallelize) {
+ // take advantage of writer-per-graph to load in parallel, one thread per named graph
+ ExecutorService loaderThreadPool = newFixedThreadPool(namedGraphs.size());
+ try {
+ loaderThreadPool.submit(() -> namedGraphs.parallelStream().forEach(loadIntoDataset(dataset))).get();
+ } catch (InterruptedException | ExecutionException e) {
+ loaderThreadPool.shutdownNow();
+ throw new JenaException(e);
+ }
+ loaderThreadPool.shutdown();
+ } else
+ // load using only this thread, default mode
+ namedGraphs.forEach(namedGraphResource -> loadNamedGraph(dataset, namedGraphResource));
+ }
+
+ private static Consumer<Resource> loadIntoDataset(Dataset ds) {
+ return namedGraphResource -> {
+ ds.begin(WRITE);
+ try {
+ loadNamedGraph(ds, namedGraphResource);
+ ds.commit();
+ } finally {
+ ds.end();
+ }
+ };
+ }
+
+ private static void loadNamedGraph(Dataset dataset, Resource namedGraphResource) {
+ final String graphName = getAsStringValue(namedGraphResource, pGraphName);
+ if (namedGraphResource.hasProperty(data)) multiValueResource(namedGraphResource, data)
+ .forEach(namedGraphData -> read(dataset.getNamedModel(graphName), namedGraphData.getURI()));
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/WriterPerGraphDatasetAssembler.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/WriterPerGraphDatasetAssembler.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/WriterPerGraphDatasetAssembler.java
deleted file mode 100644
index 3310bff..0000000
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/WriterPerGraphDatasetAssembler.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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 org.apache.jena.sparql.core.assembler;
-
-import static java.util.concurrent.Executors.newFixedThreadPool;
-import static org.apache.jena.assembler.JA.data;
-import static org.apache.jena.query.ReadWrite.WRITE;
-import static org.apache.jena.riot.RDFDataMgr.read;
-import static org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab.pGraphName;
-import static org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab.pNamedGraph;
-import static org.apache.jena.sparql.util.graph.GraphUtils.getAsStringValue;
-import static org.apache.jena.sparql.util.graph.GraphUtils.getResourceValue;
-import static org.apache.jena.sparql.util.graph.GraphUtils.multiValueResource;
-
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.function.Consumer;
-
-import org.apache.jena.assembler.Assembler;
-import org.apache.jena.query.Dataset;
-import org.apache.jena.query.DatasetFactory;
-import org.apache.jena.rdf.model.Resource;
-import org.apache.jena.shared.JenaException;
-import org.apache.jena.sparql.core.DatasetGraphPerGraphLocking;
-
-/**
- * An {@link Assembler} that creates writer-per-graph in-memory {@link Dataset}s.
- */
-public class WriterPerGraphDatasetAssembler extends TransactionalInMemDatasetAssembler {
-
- @Override
- public Resource getType() {
- return DatasetAssemblerVocab.tDatasetPGraphWriter;
- }
-
- @Override
- public Dataset createDataset() {
- return DatasetFactory.wrap(new DatasetGraphPerGraphLocking());
- }
-
- @Override
- protected void loadNamedGraphs(Resource root, Dataset dataset) {
- List<Resource> namedGraphs = multiValueResource(root, pNamedGraph);
- Resource parallelizeValue = getResourceValue(root, DatasetAssemblerVocab.pParallelize);
- // defaults to false
- boolean parallelize = parallelizeValue != null ? parallelizeValue.asLiteral().getBoolean() : false;
- if (parallelize) {
- // take advantage of writer-per-graph to load in parallel, one thread per named graph
- ExecutorService loaderThreadPool = newFixedThreadPool(namedGraphs.size());
- try {
- loaderThreadPool.submit(() -> namedGraphs.parallelStream().forEach(loadIntoDataset(dataset))).get();
- } catch (InterruptedException | ExecutionException e) {
- loaderThreadPool.shutdownNow();
- throw new JenaException(e);
- }
- loaderThreadPool.shutdown();
- } else
- // load using only this thread, default mode
- namedGraphs.forEach(namedGraphResource -> loadNamedGraph(dataset, namedGraphResource));
- }
-
- private static Consumer<Resource> loadIntoDataset(Dataset ds) {
- return namedGraphResource -> {
- ds.begin(WRITE);
- try {
- loadNamedGraph(ds, namedGraphResource);
- ds.commit();
- } finally {
- ds.end();
- }
- };
- }
-
- private static void loadNamedGraph(Dataset dataset, Resource namedGraphResource) {
- final String graphName = getAsStringValue(namedGraphResource, pGraphName);
- if (namedGraphResource.hasProperty(data)) multiValueResource(namedGraphResource, data)
- .forEach(namedGraphData -> read(dataset.getNamedModel(graphName), namedGraphData.getURI()));
- }
-}
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/test/java/org/apache/jena/sparql/TC_General.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/TC_General.java b/jena-arq/src/test/java/org/apache/jena/sparql/TC_General.java
index c9ddab3..1d14f7a 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/TC_General.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/TC_General.java
@@ -26,7 +26,7 @@ import org.apache.jena.sparql.api.TS_API ;
import org.apache.jena.sparql.core.TS_Core ;
import org.apache.jena.sparql.core.assembler.TS_Assembler ;
import org.apache.jena.sparql.core.mem.TS_DatasetTxnMem ;
-import org.apache.jena.sparql.core.pergraph.TS_DatasetGraphPerGraphLocking;
+import org.apache.jena.sparql.core.pergraph.TS_DatasetGraphGraphPerTxn;
import org.apache.jena.sparql.engine.TS_Engine ;
import org.apache.jena.sparql.engine.join.TS_Join ;
import org.apache.jena.sparql.expr.E_Function ;
@@ -72,7 +72,7 @@ import org.junit.runners.Suite ;
, TS_Core.class
, TS_Assembler.class
, TS_DatasetTxnMem.class
- , TS_DatasetGraphPerGraphLocking.class
+ , TS_DatasetGraphGraphPerTxn.class
, TS_Path.class
, TS_ParamString.class
, TS_Update.class
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/BasicTest.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/BasicTest.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/BasicTest.java
index cda0471..a78d64d 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/BasicTest.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/BasicTest.java
@@ -20,13 +20,13 @@ package org.apache.jena.sparql.core.pergraph;
import org.apache.jena.sparql.core.AbstractDatasetGraphTests;
import org.apache.jena.sparql.core.DatasetGraph;
-import org.apache.jena.sparql.core.DatasetGraphPerGraphLocking;
+import org.apache.jena.sparql.core.DatasetGraphGraphPerTxn;
public class BasicTest extends AbstractDatasetGraphTests {
@Override
protected DatasetGraph emptyDataset() {
- return new DatasetGraphPerGraphLocking();
+ return new DatasetGraphGraphPerTxn();
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/FindPatternsTest.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/FindPatternsTest.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/FindPatternsTest.java
index 9012e16..815bc8e 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/FindPatternsTest.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/FindPatternsTest.java
@@ -20,13 +20,13 @@ package org.apache.jena.sparql.core.pergraph;
import org.apache.jena.sparql.core.AbstractDatasetGraphFindPatterns;
import org.apache.jena.sparql.core.DatasetGraph;
-import org.apache.jena.sparql.core.DatasetGraphPerGraphLocking;
+import org.apache.jena.sparql.core.DatasetGraphGraphPerTxn;
public class FindPatternsTest extends AbstractDatasetGraphFindPatterns {
@Override
protected DatasetGraph create() {
- return new DatasetGraphPerGraphLocking();
+ return new DatasetGraphGraphPerTxn();
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/FindTest.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/FindTest.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/FindTest.java
index dbe4243..d292a9f 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/FindTest.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/FindTest.java
@@ -20,13 +20,13 @@ package org.apache.jena.sparql.core.pergraph;
import org.apache.jena.sparql.core.AbstractDatasetGraphFind;
import org.apache.jena.sparql.core.DatasetGraph;
-import org.apache.jena.sparql.core.DatasetGraphPerGraphLocking;
+import org.apache.jena.sparql.core.DatasetGraphGraphPerTxn;
public class FindTest extends AbstractDatasetGraphFind {
@Override
protected DatasetGraph create() {
- return new DatasetGraphPerGraphLocking();
+ return new DatasetGraphGraphPerTxn();
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/LockTest.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/LockTest.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/LockTest.java
index 8d8ab10..d30b9ab 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/LockTest.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/LockTest.java
@@ -21,14 +21,14 @@ package org.apache.jena.sparql.core.pergraph;
import static org.apache.jena.query.DatasetFactory.wrap;
import org.apache.jena.query.Dataset;
-import org.apache.jena.sparql.core.DatasetGraphPerGraphLocking;
+import org.apache.jena.sparql.core.DatasetGraphGraphPerTxn;
import org.apache.jena.sparql.core.mem.TestDatasetGraphInMemoryLock;
public class LockTest extends TestDatasetGraphInMemoryLock {
@Override
protected Dataset createDataset() {
- return wrap(new DatasetGraphPerGraphLocking());
+ return wrap(new DatasetGraphGraphPerTxn());
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/MultithreadingTest.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/MultithreadingTest.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/MultithreadingTest.java
index 3df0582..a5b7679 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/MultithreadingTest.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/MultithreadingTest.java
@@ -1,19 +1,14 @@
/*
- * 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
+ * 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
+ * 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.
+ * 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 org.apache.jena.sparql.core.pergraph;
@@ -23,12 +18,15 @@ import static org.apache.jena.graph.NodeFactory.createLiteral;
import static org.apache.jena.graph.NodeFactory.createURI;
import static org.apache.jena.query.ReadWrite.READ;
import static org.apache.jena.query.ReadWrite.WRITE;
+import static org.apache.jena.sparql.core.Quad.defaultGraphIRI;
import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.jena.atlas.junit.BaseTest;
import org.apache.jena.graph.Node;
-import org.apache.jena.sparql.core.DatasetGraphPerGraphLocking;
+import org.apache.jena.query.ReadWrite;
+import org.apache.jena.sparql.core.DatasetGraphGraphPerTxn;
+import org.apache.jena.sparql.core.Quad;
import org.junit.Test;
public class MultithreadingTest extends BaseTest {
@@ -43,9 +41,15 @@ public class MultithreadingTest extends BaseTest {
private static final Node graph2 = createURI("info:graph2");
+ private static final Node graph3 = createURI("info:graph3");
+
+ private static final Quad[] QUADS = new Quad[] { Quad.create(defaultGraphIRI, dummy, dummy, dummy),
+ Quad.create(graph1, dummy, dummy, dummy), Quad.create(graph2, dummy, dummy, dummy),
+ Quad.create(graph3, dummy, dummy, dummy) };
+
@Test
public void loadTwoGraphsAtOnce() {
- DatasetGraphPerGraphLocking dataset = new DatasetGraphPerGraphLocking();
+ DatasetGraphGraphPerTxn dataset = new DatasetGraphGraphPerTxn();
// We start a thread loading a graph, then wait for the main thread to start loading a different graph. The
// first thread must wait to see that the main thread has successfully started loading its graph to finish its
@@ -88,4 +92,29 @@ public class MultithreadingTest extends BaseTest {
dataset.end();
}
}
+
+ @Test
+ public void readSeveralGraphsInOneTxn() {
+ DatasetGraphGraphPerTxn dataset = new DatasetGraphGraphPerTxn();
+ // write some quads into different graphs, using a txn-per-graph
+ for (Quad q : QUADS) {
+ dataset.begin(WRITE);
+ try {
+ dataset.add(q);
+ dataset.commit();
+ } finally {
+ dataset.end();
+ }
+ }
+ // check that they are all there in one big txn
+ dataset.begin(READ);
+ try {
+ for (Quad q : QUADS) {
+ assertTrue("Couldn't find quad in its graph!", dataset.contains(q));
+ assertTrue("Couldn't find quad in its graph!", dataset.getGraph(q.getGraph()).contains(q.asTriple()));
+ }
+ } finally {
+ dataset.end();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TS_DatasetGraphGraphPerTxn.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TS_DatasetGraphGraphPerTxn.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TS_DatasetGraphGraphPerTxn.java
new file mode 100644
index 0000000..b7f1b99
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TS_DatasetGraphGraphPerTxn.java
@@ -0,0 +1,28 @@
+/*
+ * 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 org.apache.jena.sparql.core.pergraph;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses({ BasicTest.class, FindPatternsTest.class, FindTest.class, LockTest.class, TransactionLifecycleTest.class,
+ ViewTest.class, MultithreadingTest.class })
+public class TS_DatasetGraphGraphPerTxn {}
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TS_DatasetGraphPerGraphLocking.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TS_DatasetGraphPerGraphLocking.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TS_DatasetGraphPerGraphLocking.java
deleted file mode 100644
index 4f31459..0000000
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TS_DatasetGraphPerGraphLocking.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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 org.apache.jena.sparql.core.pergraph;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-
-@RunWith(Suite.class)
-@Suite.SuiteClasses({ BasicTest.class, FindPatternsTest.class, FindTest.class, LockTest.class, TransactionLifecycleTest.class,
- ViewTest.class, MultithreadingTest.class })
-public class TS_DatasetGraphPerGraphLocking {}
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TransactionLifecycleTest.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TransactionLifecycleTest.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TransactionLifecycleTest.java
index b3ec3d7..883412d 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TransactionLifecycleTest.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/TransactionLifecycleTest.java
@@ -21,7 +21,7 @@ package org.apache.jena.sparql.core.pergraph;
import static org.apache.jena.query.DatasetFactory.wrap;
import org.apache.jena.query.Dataset;
-import org.apache.jena.sparql.core.DatasetGraphPerGraphLocking;
+import org.apache.jena.sparql.core.DatasetGraphGraphPerTxn;
import org.apache.jena.sparql.transaction.AbstractTestTransactionLifecycle;
import org.junit.Ignore;
import org.junit.Test;
@@ -30,7 +30,7 @@ public class TransactionLifecycleTest extends AbstractTestTransactionLifecycle {
@Override
protected Dataset create() {
- return wrap(new DatasetGraphPerGraphLocking());
+ return wrap(new DatasetGraphGraphPerTxn());
}
@Test
http://git-wip-us.apache.org/repos/asf/jena/blob/ade1e941/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/ViewTest.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/ViewTest.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/ViewTest.java
index cc1c029..1a8a272 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/ViewTest.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/pergraph/ViewTest.java
@@ -19,13 +19,13 @@
package org.apache.jena.sparql.core.pergraph;
import org.apache.jena.sparql.core.DatasetGraph;
-import org.apache.jena.sparql.core.DatasetGraphPerGraphLocking;
+import org.apache.jena.sparql.core.DatasetGraphGraphPerTxn;
import org.apache.jena.sparql.core.TestDatasetGraphViewGraphs;
public class ViewTest extends TestDatasetGraphViewGraphs {
@Override
protected DatasetGraph createBaseDSG() {
- return new DatasetGraphPerGraphLocking();
+ return new DatasetGraphGraphPerTxn();
}
}