You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/02/13 22:26:12 UTC
[3/3] incubator-tinkerpop git commit: OMG -- no more
submit(g.compute()). TraversalEngine is now an interface with Graph.engine()
being the user specified traversal engine for all traversals emanating from
that graph. Insanity........ this was a crazy cr
OMG -- no more submit(g.compute()). TraversalEngine is now an interface with Graph.engine() being the user specified traversal engine for all traversals emanating from that graph. Insanity........ this was a crazy crazy crazy amount of work... there will be cleaning for days to come. Fixed #565
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/d70378f4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/d70378f4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/d70378f4
Branch: refs/heads/master
Commit: d70378f48ffce15b10b61141547b6e10db514397
Parents: 84c1632
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Feb 13 14:25:52 2015 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Feb 13 14:26:01 2015 -0700
----------------------------------------------------------------------
.../tinkerpop/gremlin/process/Traversal.java | 54 +++++---------
.../gremlin/process/TraversalEngine.java | 22 +++++-
.../traversal/TraversalVertexProgram.java | 14 ++--
.../traversal/step/map/ComputerResultStep.java | 70 +++++++++++-------
.../computer/util/DefaultComputerResult.java | 2 +
.../graph/traversal/DefaultGraphTraversal.java | 4 +-
.../process/graph/traversal/EdgeTraversal.java | 2 +-
.../graph/traversal/ElementTraversal.java | 6 --
.../process/graph/traversal/GraphTraversal.java | 19 +----
.../traversal/VertexPropertyTraversal.java | 2 +-
.../graph/traversal/VertexTraversal.java | 2 +-
.../gremlin/process/graph/traversal/__.java | 8 +--
.../graph/traversal/step/map/BackStep.java | 2 +-
.../graph/traversal/step/map/SelectOneStep.java | 2 +-
.../graph/traversal/step/map/SelectStep.java | 2 +-
.../traversal/step/sideEffect/GraphStep.java | 2 +-
.../traversal/step/sideEffect/GroupStep.java | 2 +-
.../traversal/step/sideEffect/ProfileStep.java | 6 +-
.../sideEffect/mapreduce/GroupMapReduce.java | 7 +-
.../traversal/step/util/ComputerAwareStep.java | 4 +-
.../ComparatorHolderRemovalStrategy.java | 2 +-
.../traversal/strategy/ReducingStrategy.java | 2 +-
.../strategy/TraversalVerificationStrategy.java | 7 +-
.../traversal/util/EmptyGraphTraversal.java | 5 --
.../process/traversal/DefaultTraversal.java | 76 ++++++++++++++------
.../engine/ComputerTraversalEngine.java | 57 +++++++++++++++
.../engine/StandardTraversalEngine.java | 54 ++++++++++++++
.../lambda/AbstractLambdaTraversal.java | 23 ++++--
.../traversal/lambda/HasNextTraversal.java | 16 ++++-
.../process/traversal/util/EmptyTraversal.java | 18 +++--
.../tinkerpop/gremlin/structure/Graph.java | 14 ++--
.../structure/strategy/PartitionStrategy.java | 9 +--
.../structure/strategy/StrategyGraph.java | 11 +++
.../structure/util/batch/BatchGraph.java | 12 ++++
.../structure/util/empty/EmptyGraph.java | 12 ++++
.../step/branch/GroovyUnionTest.groovy | 2 +
.../step/filter/GroovySampleTest.groovy | 3 +
.../step/filter/GroovyWhereTest.groovy | 3 +
.../traversal/step/map/GroovyCountTest.groovy | 2 +
.../traversal/step/map/GroovyFoldTest.groovy | 2 +
.../traversal/step/map/GroovyMapTest.groovy | 3 +
.../traversal/step/map/GroovyOrderTest.groovy | 8 ++-
.../traversal/step/map/GroovySelectTest.groovy | 7 ++
.../process/GroovyProcessComputerSuite.java | 2 +-
.../AbstractImportCustomizerProvider.java | 8 ++-
.../groovy/engine/GroovyTraversalScript.java | 17 ++---
.../tinkerpop/gremlin/AbstractGremlinTest.java | 5 +-
.../apache/tinkerpop/gremlin/GraphProvider.java | 7 +-
.../gremlin/process/ProcessComputerSuite.java | 1 +
.../ranking/PageRankVertexProgramTest.java | 2 +
.../graph/traversal/step/branch/BranchTest.java | 4 +-
.../graph/traversal/step/branch/ChooseTest.java | 2 +-
.../graph/traversal/step/branch/LocalTest.java | 18 ++---
.../graph/traversal/step/branch/RepeatTest.java | 18 ++---
.../graph/traversal/step/branch/UnionTest.java | 12 ++--
.../graph/traversal/step/filter/AndTest.java | 4 +-
.../graph/traversal/step/filter/CoinTest.java | 4 +-
.../traversal/step/filter/CyclicPathTest.java | 4 +-
.../graph/traversal/step/filter/ExceptTest.java | 19 +++--
.../graph/traversal/step/filter/FilterTest.java | 25 ++++---
.../graph/traversal/step/filter/HasNotTest.java | 4 +-
.../graph/traversal/step/filter/HasTest.java | 28 ++++----
.../graph/traversal/step/filter/IsTest.java | 10 +--
.../graph/traversal/step/filter/OrTest.java | 4 +-
.../graph/traversal/step/filter/RetainTest.java | 8 ++-
.../graph/traversal/step/filter/SampleTest.java | 9 ++-
.../traversal/step/filter/SimplePathTest.java | 4 +-
.../graph/traversal/step/filter/WhereTest.java | 8 ++-
.../graph/traversal/step/map/BackTest.java | 18 ++---
.../graph/traversal/step/map/CoalesceTest.java | 10 +--
.../graph/traversal/step/map/CountTest.java | 16 +++--
.../graph/traversal/step/map/FoldTest.java | 6 +-
.../graph/traversal/step/map/MapTest.java | 13 +++-
.../graph/traversal/step/map/MaxTest.java | 4 +-
.../graph/traversal/step/map/MeanTest.java | 2 +-
.../graph/traversal/step/map/MinTest.java | 4 +-
.../graph/traversal/step/map/OrderTest.java | 20 ++++--
.../graph/traversal/step/map/PathTest.java | 4 +-
.../traversal/step/map/PropertiesTest.java | 4 +-
.../graph/traversal/step/map/SelectTest.java | 20 ++++--
.../graph/traversal/step/map/UnfoldTest.java | 6 +-
.../graph/traversal/step/map/ValueMapTest.java | 9 ++-
.../graph/traversal/step/map/VertexTest.java | 50 ++++++-------
.../step/sideEffect/AggregateTest.java | 6 +-
.../step/sideEffect/GroupCountTest.java | 12 ++--
.../traversal/step/sideEffect/GroupTest.java | 10 +--
.../traversal/step/sideEffect/InjectTest.java | 4 +-
.../traversal/step/sideEffect/ProfileTest.java | 4 +-
.../traversal/step/sideEffect/SackTest.java | 8 ++-
.../step/sideEffect/SideEffectCapTest.java | 4 +-
.../traversal/step/sideEffect/StoreTest.java | 8 +--
.../traversal/step/sideEffect/TreeTest.java | 6 +-
.../strategy/RangeByIsCountStrategyTest.java | 4 +-
.../TraversalVerificationStrategyTest.java | 21 +++---
.../process/traversal/DefaultTraversalTest.java | 4 +-
.../structure/GraphConstructionTest.java | 1 +
.../process/util/TraversalHelperTest.java | 9 +--
.../groovy/plugin/HadoopRemoteAcceptor.java | 4 +-
.../strategy/HadoopElementStepStrategy.java | 2 +-
.../gremlin/hadoop/structure/HadoopGraph.java | 21 ++++--
.../gremlin/neo4j/structure/Neo4jGraph.java | 19 ++++-
.../strategy/TinkerElementStepStrategy.java | 2 +-
.../strategy/TinkerGraphStepStrategy.java | 2 +-
.../tinkergraph/structure/TinkerFactory.java | 2 +-
.../tinkergraph/structure/TinkerGraph.java | 21 +++++-
.../tinkergraph/TinkerGraphGraphProvider.java | 3 +-
.../tinkergraph/structure/TinkerGraphTest.java | 10 ++-
107 files changed, 762 insertions(+), 418 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traversal.java
index d50efe0..94139ea 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traversal.java
@@ -18,12 +18,10 @@
*/
package org.apache.tinkerpop.gremlin.process;
-import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.DefaultTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.step.EmptyStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
@@ -50,7 +48,7 @@ import java.util.stream.Collectors;
* This is the base interface for all traversal's, where each extending interface is seen as a domain specific language.
* For example, {@link GraphTraversal} is a domain specific language for traversing a graph using "graph concepts" (e.g. vertices, edges).
* Another example may represent the graph using "social concepts" (e.g. people, cities, artifacts).
- * A {@link Traversal} is evaluated in one of two ways: {@link TraversalEngine#STANDARD} (OLTP) and {@link TraversalEngine#COMPUTER} (OLAP).
+ * A {@link Traversal} is evaluated in one of two ways: {@link StandardTraversalEngine} (OLTP) and {@link ComputerTraversalEngine} (OLAP).
* OLTP traversals leverage an iterator and are executed within a single JVM (with data access allowed to be remote).
* OLAP traversals leverage {@link GraphComputer} and are executed between multiple JVMs (and/or cores).
*
@@ -73,25 +71,6 @@ public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable {
}
/**
- * Submit the traversal to a {@link GraphComputer} for OLAP execution.
- * This method should execute the traversal via {@link TraversalVertexProgram}.
- * It should then wrap the {@link org.apache.tinkerpop.gremlin.process.computer.util.DefaultComputerResult} in a new {@link Traversal} containing a {@link ComputerResultStep}.
- *
- * @param computer the GraphComputer to execute the traversal on
- * @return a new traversal with the starts being the results of the TraversalVertexProgram
- */
- public default Traversal<S, E> submit(final GraphComputer computer) {
- try {
- final TraversalVertexProgram vertexProgram = TraversalVertexProgram.build().traversal(this.asAdmin()).create();
- final ComputerResult result = computer.program(vertexProgram).submit().get();
- final Traversal.Admin<S, S> traversal = new DefaultTraversal<>(result.graph().getClass());
- return traversal.asAdmin().addStep(new ComputerResultStep<>(traversal, result, vertexProgram, true));
- } catch (final Exception e) {
- throw new IllegalStateException(e.getMessage(), e);
- }
- }
-
- /**
* Return an {@link Optional} of the next E object in the traversal.
* If the traversal is empty, then an {@link Optional#empty()} is returned.
*
@@ -154,8 +133,7 @@ public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable {
*/
public default <C extends Collection<E>> C fill(final C collection) {
try {
- if (!this.asAdmin().getEngine().isPresent())
- this.asAdmin().applyStrategies(TraversalEngine.STANDARD);
+ if (!this.asAdmin().isLocked()) this.asAdmin().applyStrategies();
// use the end step so the results are bulked
final Step<?, E> endStep = this.asAdmin().getEndStep();
while (true) {
@@ -177,8 +155,7 @@ public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable {
*/
public default <A, B> Traversal<A, B> iterate() {
try {
- if (!this.asAdmin().getEngine().isPresent())
- this.asAdmin().applyStrategies(TraversalEngine.STANDARD);
+ if (!this.asAdmin().isLocked()) this.asAdmin().applyStrategies();
// use the end step so the results are bulked
final Step<?, E> endStep = this.asAdmin().getEndStep();
while (true) {
@@ -244,7 +221,7 @@ public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable {
* @param starts an iterators of traversers
*/
public default void addStarts(final Iterator<Traverser<S>> starts) {
- if(!this.getEngine().isPresent()) this.applyStrategies(TraversalEngine.STANDARD);
+ if (!this.isLocked()) this.applyStrategies();
this.getStartStep().addStarts(starts);
}
@@ -255,7 +232,7 @@ public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable {
* @param start a traverser to add to the traversal
*/
public default void addStart(final Traverser<S> start) {
- if(!this.getEngine().isPresent()) this.applyStrategies(TraversalEngine.STANDARD);
+ if (!this.isLocked()) this.applyStrategies();
this.getStartStep().addStart(start);
}
@@ -340,18 +317,17 @@ public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable {
* Once the strategies are applied, the traversal is "locked" and can no longer have steps added to it.
* The order of operations for strategy applications should be: globally id steps, apply strategies to root traversal, then to nested traversals.
*
- * @param engine the engine that will ultimately execute the traversal.
* @throws IllegalStateException if the {@link TraversalStrategies} have already been applied
*/
- public void applyStrategies(final TraversalEngine engine) throws IllegalStateException;
+ public void applyStrategies() throws IllegalStateException;
/**
- * When the {@link TraversalStrategies} have been applied, the destined {@link TraversalEngine} has been declared.
- * Once a traversal engine has been declared, the traversal can no longer be extended, only executed.
- *
- * @return whether the traversal engine has been defined or not.
+ * @return whether the traversal engine associated with this traversal.
*/
- public Optional<TraversalEngine> getEngine();
+ public TraversalEngine getEngine();
+
+ public void setEngine(final TraversalEngine engine);
+
/**
* Get the {@link TraverserGenerator} associated with this traversal.
@@ -376,7 +352,7 @@ public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable {
requirements.add(TraverserRequirement.SIDE_EFFECTS);
if (this.getSideEffects().getSackInitialValue().isPresent())
requirements.add(TraverserRequirement.SACK);
- if (this.getEngine().isPresent() && this.getEngine().get().equals(TraversalEngine.COMPUTER))
+ if (this.getEngine().isComputer())
requirements.add(TraverserRequirement.BULK);
return requirements;
}
@@ -450,6 +426,8 @@ public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable {
*/
public Traversal.Admin<S, E> clone() throws CloneNotSupportedException;
+ public boolean isLocked();
+
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalEngine.java
index 276d483..c7b84b0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalEngine.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalEngine.java
@@ -18,10 +18,28 @@
*/
package org.apache.tinkerpop.gremlin.process;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+
+import java.io.Serializable;
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public enum TraversalEngine {
+public interface TraversalEngine extends Serializable {
+
+ public enum Type {STANDARD, COMPUTER}
+
+ public void processTraversal(final Traversal.Admin<?, ?> traversal);
+
+ public Type getType();
+
+ public void setGraph(final Graph graph);
+
+ public default boolean isStandard() {
+ return this.getType().equals(Type.STANDARD);
+ }
- STANDARD, COMPUTER
+ public default boolean isComputer() {
+ return this.getType().equals(Type.COMPUTER);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
index dc68f9e..be22349 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
@@ -18,8 +18,8 @@
*/
package org.apache.tinkerpop.gremlin.process.computer.traversal;
+import org.apache.commons.configuration.Configuration;
import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.TraversalSideEffects;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.TraverserGenerator;
@@ -29,6 +29,7 @@ import org.apache.tinkerpop.gremlin.process.computer.MessageCombiner;
import org.apache.tinkerpop.gremlin.process.computer.MessageScope;
import org.apache.tinkerpop.gremlin.process.computer.Messenger;
import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.sideEffect.mapreduce.TraverserMapReduce;
import org.apache.tinkerpop.gremlin.process.computer.util.AbstractVertexProgramBuilder;
import org.apache.tinkerpop.gremlin.process.computer.util.LambdaHolder;
@@ -44,7 +45,6 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import org.apache.commons.configuration.Configuration;
import java.util.Arrays;
import java.util.Collections;
@@ -108,14 +108,16 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
throw new IllegalArgumentException("The configuration does not have a traversal supplier");
}
this.traversal = this.traversalSupplier.get().get();
- if (!this.traversal.getEngine().isPresent())
- this.traversal.applyStrategies(TraversalEngine.COMPUTER);
+ if (!this.traversal.isLocked())
+ this.traversal.applyStrategies();
+
+ ((ComputerResultStep) this.traversal.getEndStep()).asIdentity = true;
this.traversalMatrix = new TraversalMatrix<>(this.traversal);
for (final MapReducer<?, ?, ?, ?, ?> mapReducer : TraversalHelper.getStepsOfAssignableClassRecurssively(MapReducer.class, this.traversal)) {
this.mapReducers.add(mapReducer.getMapReduce());
}
- if (!(this.traversal.getEndStep() instanceof SideEffectCapStep))
- this.mapReducers.add(new TraverserMapReduce(this.traversal.getEndStep()));
+ if (!(this.traversal.getEndStep().getPreviousStep() instanceof SideEffectCapStep))
+ this.mapReducers.add(new TraverserMapReduce(this.traversal.getEndStep().getPreviousStep()));
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
index 80ee03c..744805b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
@@ -22,7 +22,7 @@ import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
-import org.apache.tinkerpop.gremlin.process.computer.Memory;
+import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.sideEffect.mapreduce.TraverserMapReduce;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.SideEffectCapStep;
@@ -33,6 +33,7 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.util.detached.Attachable;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import java.util.EnumSet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -44,56 +45,73 @@ import java.util.Set;
*/
public final class ComputerResultStep<S> extends AbstractStep<S, S> {
- private final Iterator<Traverser.Admin<S>> traversers;
- private final Graph graph;
- private final Memory memory;
- private final Traversal.Admin<?, ?> computerTraversal;
+ private final transient GraphComputer graphComputer;
+
+ private Iterator<Traverser.Admin<S>> traversers;
+ private Graph graph;
private final boolean attachElements; // should be part of graph computer with "propagate properties"
+ public boolean first = true;
+ public boolean asIdentity = false;
- public ComputerResultStep(final Traversal.Admin traversal, final ComputerResult result, final TraversalVertexProgram traversalVertexProgram, final boolean attachElements) {
+ public ComputerResultStep(final Traversal.Admin traversal, final GraphComputer graphComputer, final boolean attachElements) {
super(traversal);
- this.graph = result.graph();
- this.memory = result.memory();
this.attachElements = attachElements;
- this.memory.keys().forEach(key -> traversal.getSideEffects().set(key, this.memory.get(key)));
- this.computerTraversal = traversalVertexProgram.getTraversal();
+ this.graphComputer = graphComputer;
+ }
+
+ @Override
+ public Traverser<S> processNextStart() {
+ if (this.asIdentity) {
+ return this.starts.next();
+ }
+ if (this.first) {
+ try {
+ final TraversalVertexProgram vertexProgram = TraversalVertexProgram.build().traversal(this.getTraversal()).create();
+ populateTraversers(this.graphComputer.program(vertexProgram).submit().get());
+ } catch (Exception e) {
+ throw new IllegalStateException(e.getMessage(), e);
+ }
+ this.first = false;
+ }
+
+ final Traverser.Admin<S> traverser = this.traversers.next();
+ if (this.attachElements && (traverser.get() instanceof Attachable))
+ traverser.set((S) ((Attachable) traverser.get()).attach(this.graph));
+ return traverser;
+ }
- final Step endStep = this.computerTraversal.getEndStep();
+ public void populateTraversers(final ComputerResult result) {
+ this.graph = result.graph();
+ result.memory().keys().forEach(key -> this.getTraversal().getSideEffects().set(key, result.memory().get(key)));
+ final Step endStep = this.getPreviousStep();
if (endStep instanceof SideEffectCapStep) {
final List<String> sideEffectKeys = ((SideEffectCapStep<?, ?>) endStep).getSideEffectKeys();
if (sideEffectKeys.size() == 1)
- this.traversers = IteratorUtils.of(this.computerTraversal.getTraverserGenerator().generate(this.memory.get(sideEffectKeys.get(0)), this, 1l));
+ this.traversers = IteratorUtils.of(this.getTraversal().getTraverserGenerator().generate(result.memory().get(sideEffectKeys.get(0)), this, 1l));
else {
final Map<String, Object> sideEffects = new HashMap<>();
for (final String sideEffectKey : sideEffectKeys) {
- sideEffects.put(sideEffectKey, this.memory.get(sideEffectKey));
+ sideEffects.put(sideEffectKey, result.memory().get(sideEffectKey));
}
- this.traversers = IteratorUtils.of(this.computerTraversal.getTraverserGenerator().generate((S) sideEffects, this, 1l));
+ this.traversers = IteratorUtils.of(this.getTraversal().getTraverserGenerator().generate((S) sideEffects, this, 1l));
}
} else {
- this.traversers = this.memory.get(TraverserMapReduce.TRAVERSERS);
+ this.traversers = result.memory().get(TraverserMapReduce.TRAVERSERS);
}
- }
-
- @Override
- public Traverser<S> processNextStart() {
- final Traverser.Admin<S> traverser = this.traversers.next();
- if (this.attachElements && (traverser.get() instanceof Attachable))
- traverser.set((S) ((Attachable) traverser.get()).attach(this.graph));
- return traverser;
+ this.first = false;
}
@Override
public String toString() {
- return TraversalHelper.makeStepString(this, this.computerTraversal);
+ return TraversalHelper.makeStepString(this);
}
@Override
public Set<TraverserRequirement> getRequirements() {
- return this.computerTraversal.getTraverserRequirements();
+ return EnumSet.of(TraverserRequirement.OBJECT);
}
public Traversal.Admin<?, ?> getComputerTraversal() {
- return this.computerTraversal;
+ return this.getTraversal();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/DefaultComputerResult.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/DefaultComputerResult.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/DefaultComputerResult.java
index da1ebfc..86dd200 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/DefaultComputerResult.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/DefaultComputerResult.java
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.process.computer.util;
import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
import org.apache.tinkerpop.gremlin.process.computer.Memory;
+import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
@@ -36,6 +37,7 @@ public class DefaultComputerResult implements ComputerResult {
public DefaultComputerResult(final Graph graph, final Memory memory) {
this.graph = graph;
+ this.graph.engine(StandardTraversalEngine.instance());
this.memory = memory;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/DefaultGraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/DefaultGraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/DefaultGraphTraversal.java
index 44bc92a..3279c9f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/DefaultGraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/DefaultGraphTraversal.java
@@ -25,8 +25,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.DefaultTraversal;
*/
public class DefaultGraphTraversal<S, E> extends DefaultTraversal<S, E> implements GraphTraversal.Admin<S, E> {
- public DefaultGraphTraversal(final Class emanatingClass) {
- super(emanatingClass);
+ public DefaultGraphTraversal(final Object emanatingObject) {
+ super(emanatingObject);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/EdgeTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/EdgeTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/EdgeTraversal.java
index 39f7f26..e6d5a9a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/EdgeTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/EdgeTraversal.java
@@ -31,7 +31,7 @@ public interface EdgeTraversal extends ElementTraversal<Edge> {
@Override
default GraphTraversal<Edge, Edge> start() {
- final GraphTraversal.Admin<Edge, Edge> traversal = new DefaultGraphTraversal<>(this.getClass());
+ final GraphTraversal.Admin<Edge, Edge> traversal = new DefaultGraphTraversal<>(this);
return traversal.addStep(new StartStep<>(traversal, this));
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
index 516acff..344227f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
@@ -54,12 +54,6 @@ public abstract interface ElementTraversal<A extends Element> {
throw new UnsupportedOperationException("This method must be implemented by the element");
}
- //////////////////////////////////////////////////////////////////////
-
- public default GraphTraversal<A, A> submit(final GraphComputer graphComputer) {
- return this.start().submit(graphComputer);
- }
-
///////////////////// MAP STEPS /////////////////////
public default <E2> GraphTraversal<A, E2> map(final Function<Traverser<A>, E2> function) {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
index 83e4175..15680c1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
@@ -23,12 +23,7 @@ import org.apache.tinkerpop.gremlin.process.Scope;
import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.T;
import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.Traverser;
-import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
-import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.lambda.LoopTraversal;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.ComparatorHolder;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.TraversalOptionParent;
@@ -165,18 +160,6 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
}
@Override
- public default GraphTraversal<S, E> submit(final GraphComputer computer) {
- try {
- final TraversalVertexProgram vertexProgram = TraversalVertexProgram.build().traversal(this.asAdmin()).create();
- final ComputerResult result = computer.program(vertexProgram).submit().get();
- final GraphTraversal.Admin<S, S> traversal = new DefaultGraphTraversal<>(result.graph().getClass());
- return traversal.addStep(new ComputerResultStep<>(traversal, result, vertexProgram, true));
- } catch (final Exception e) {
- throw new IllegalStateException(e.getMessage(), e);
- }
- }
-
- @Override
public default GraphTraversal.Admin<S, E> asAdmin() {
return (GraphTraversal.Admin<S, E>) this;
}
@@ -789,7 +772,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
@Override
public default void remove() {
try {
- this.asAdmin().applyStrategies(TraversalEngine.STANDARD);
+ this.asAdmin().applyStrategies();
final Step<?, E> endStep = this.asAdmin().getEndStep();
while (true) {
final Object object = endStep.next().get();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/VertexPropertyTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/VertexPropertyTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/VertexPropertyTraversal.java
index 9c8cf2d..3abaf33 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/VertexPropertyTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/VertexPropertyTraversal.java
@@ -31,7 +31,7 @@ public interface VertexPropertyTraversal extends ElementTraversal<VertexProperty
@Override
default GraphTraversal<VertexProperty, VertexProperty> start() {
- final GraphTraversal.Admin<VertexProperty, VertexProperty> traversal = new DefaultGraphTraversal<>(this.getClass());
+ final GraphTraversal.Admin<VertexProperty, VertexProperty> traversal = new DefaultGraphTraversal<>(this);
return traversal.addStep(new StartStep<>(traversal, this));
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/VertexTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/VertexTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/VertexTraversal.java
index 55ec6c4..e24933a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/VertexTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/VertexTraversal.java
@@ -32,7 +32,7 @@ public interface VertexTraversal extends ElementTraversal<Vertex> {
@Override
default GraphTraversal<Vertex, Vertex> start() {
- final GraphTraversal.Admin<Vertex, Vertex> traversal = new DefaultGraphTraversal<>(this.getClass());
+ final GraphTraversal.Admin<Vertex, Vertex> traversal = new DefaultGraphTraversal<>(this);
return traversal.addStep(new StartStep<>(traversal, this));
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
index 56f1ff7..b303267 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
@@ -53,13 +53,7 @@ public class __ {
//////////////////////////////////////////////////////////////////////
public static <A> GraphTraversal<A, A> start() {
- return new DefaultGraphTraversal<>(__.class);
- }
-
- //////////////////////////////////////////////////////////////////////
-
- public static <A> GraphTraversal<A, A> submit(final GraphComputer graphComputer) {
- return __.<A>start().submit(graphComputer);
+ return new DefaultGraphTraversal<>(new __());
}
///////////////////// MAP STEPS /////////////////////
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/BackStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/BackStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/BackStep.java
index f0f93ef..6a4c4c1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/BackStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/BackStep.java
@@ -48,7 +48,7 @@ public final class BackStep<S, E> extends MapStep<S, E> implements EngineDepende
@Override
public void onEngine(final TraversalEngine traversalEngine) {
- this.requiresPaths = traversalEngine.equals(TraversalEngine.COMPUTER);
+ this.requiresPaths = traversalEngine.isComputer();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectOneStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectOneStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectOneStep.java
index 88ae977..b1aaa1d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectOneStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectOneStep.java
@@ -59,7 +59,7 @@ public final class SelectOneStep<S, E> extends MapStep<S, E> implements Traversa
@Override
public void onEngine(final TraversalEngine traversalEngine) {
- this.requiresPaths = traversalEngine.equals(TraversalEngine.COMPUTER) ?
+ this.requiresPaths = traversalEngine.isComputer() ?
TraversalHelper.getLabelsUpTo(this, this.traversal.asAdmin()).stream().filter(this.selectLabel::equals).findAny().isPresent() :
TraversalHelper.getStepsUpTo(this, this.traversal.asAdmin()).stream()
.filter(step -> step instanceof CollectingBarrierStep)
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectStep.java
index e0ccc0d..ee1d840 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectStep.java
@@ -87,7 +87,7 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
@Override
public void onEngine(final TraversalEngine traversalEngine) {
- this.requiresPaths = traversalEngine.equals(TraversalEngine.COMPUTER) ?
+ this.requiresPaths = traversalEngine.isComputer() ?
TraversalHelper.getLabelsUpTo(this, this.traversal.asAdmin()).stream().filter(this.selectLabels::contains).findAny().isPresent() :
TraversalHelper.getStepsUpTo(this, this.traversal.asAdmin()).stream()
.filter(step -> step instanceof CollectingBarrierStep)
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GraphStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GraphStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GraphStep.java
index f50e542..5f4ba94 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GraphStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GraphStep.java
@@ -84,7 +84,7 @@ public class GraphStep<S extends Element> extends StartStep<S> implements Engine
@Override
public void onEngine(final TraversalEngine traversalEngine) {
- if (traversalEngine.equals(TraversalEngine.COMPUTER)) {
+ if (traversalEngine.isComputer()) {
this.iteratorSupplier = Collections::emptyIterator;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupStep.java
index f8ce5cd..81745b8 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupStep.java
@@ -101,7 +101,7 @@ public final class GroupStep<S, K, V, R> extends SideEffectStep<S> implements Si
@Override
public void onEngine(final TraversalEngine traversalEngine) {
- this.onGraphComputer = traversalEngine.equals(TraversalEngine.COMPUTER);
+ this.onGraphComputer = traversalEngine.isComputer();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/ProfileStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/ProfileStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/ProfileStep.java
index 98876a2..bf930af 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/ProfileStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/ProfileStep.java
@@ -88,9 +88,9 @@ public final class ProfileStep<S> extends AbstractStep<S, S> implements Reversib
}
private StandardTraversalMetrics getTraversalMetricsUtil() {
- StandardTraversalMetrics traversalMetrics = this.getTraversal().asAdmin().getSideEffects().getOrCreate(TraversalMetrics.METRICS_KEY, StandardTraversalMetrics::new);
- final boolean isComputer = this.traversal.asAdmin().getEngine().get().equals(TraversalEngine.COMPUTER);
- traversalMetrics.initializeIfNecessary(this.getId(), this.traversal.asAdmin().getSteps().indexOf(this), name, isComputer);
+ StandardTraversalMetrics traversalMetrics = this.getTraversal().getSideEffects().getOrCreate(TraversalMetrics.METRICS_KEY, StandardTraversalMetrics::new);
+ final boolean isComputer = this.getTraversal().getEngine().isComputer();
+ traversalMetrics.initializeIfNecessary(this.getId(), this.getTraversal().getSteps().indexOf(this), name, isComputer);
return traversalMetrics;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/mapreduce/GroupMapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/mapreduce/GroupMapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/mapreduce/GroupMapReduce.java
index d5ff879..433330f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/mapreduce/GroupMapReduce.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/mapreduce/GroupMapReduce.java
@@ -18,8 +18,8 @@
*/
package org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.mapreduce;
+import org.apache.commons.configuration.Configuration;
import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.computer.KeyValue;
import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
@@ -29,7 +29,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalMatrix;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
import org.apache.tinkerpop.gremlin.process.util.BulkSet;
import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.commons.configuration.Configuration;
import java.util.Collection;
import java.util.Collections;
@@ -75,8 +74,8 @@ public final class GroupMapReduce implements MapReduce<Object, Collection, Objec
this.sideEffectKey = configuration.getString(GROUP_BY_STEP_SIDE_EFFECT_KEY);
this.groupStepId = configuration.getString(GROUP_BY_STEP_STEP_ID);
final Traversal.Admin<?, ?> traversal = TraversalVertexProgram.getTraversalSupplier(configuration).get();
- if (!traversal.getEngine().isPresent())
- traversal.applyStrategies(TraversalEngine.COMPUTER); // TODO: this is a scary error prone requirement, but only a problem for GroupStep
+ if (!traversal.isLocked())
+ traversal.applyStrategies(); // TODO: this is a scary error prone requirement, but only a problem for GroupStep
final GroupStep groupStep = new TraversalMatrix<>(traversal).getStepById(this.groupStepId);
this.reduceFunction = groupStep.getReduceTraversal();
this.mapSupplier = traversal.getSideEffects().<Map>getRegisteredSupplier(this.sideEffectKey).orElse(HashMap::new);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ComputerAwareStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ComputerAwareStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ComputerAwareStep.java
index 39fac47..32914ae 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ComputerAwareStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ComputerAwareStep.java
@@ -52,7 +52,7 @@ public abstract class ComputerAwareStep<S, E> extends AbstractStep<S, E> impleme
@Override
public void onEngine(final TraversalEngine engine) {
- this.traverserStepIdSetByChild = engine.equals(TraversalEngine.COMPUTER);
+ this.traverserStepIdSetByChild = engine.isComputer();
}
@Override
@@ -88,7 +88,7 @@ public abstract class ComputerAwareStep<S, E> extends AbstractStep<S, E> impleme
@Override
public void onEngine(final TraversalEngine engine) {
- this.traverserStepIdSetByChild = engine.equals(TraversalEngine.COMPUTER);
+ this.traverserStepIdSetByChild = engine.isComputer();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ComparatorHolderRemovalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ComparatorHolderRemovalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ComparatorHolderRemovalStrategy.java
index 71e894a..8cf6cec 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ComparatorHolderRemovalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ComparatorHolderRemovalStrategy.java
@@ -36,7 +36,7 @@ public final class ComparatorHolderRemovalStrategy extends AbstractTraversalStra
@Override
public void apply(final Traversal.Admin<?, ?> traversal, final TraversalEngine engine) {
- if (engine.equals(TraversalEngine.STANDARD))
+ if (engine.isStandard())
return;
if (TraversalHelper.hasStepOfAssignableClass(ComparatorHolder.class, traversal)) {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java
index b56ec45..e858912 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java
@@ -38,7 +38,7 @@ public final class ReducingStrategy extends AbstractTraversalStrategy {
@Override
public void apply(final Traversal.Admin<?, ?> traversal, final TraversalEngine engine) {
- if (engine.equals(TraversalEngine.STANDARD))
+ if (engine.isStandard())
return;
final Step endStep = traversal.getEndStep();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/TraversalVerificationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/TraversalVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/TraversalVerificationStrategy.java
index 4c7fbd3..f070380 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/TraversalVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/TraversalVerificationStrategy.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.strategy;
import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ComputerAwareStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
@@ -42,12 +43,14 @@ public final class TraversalVerificationStrategy extends AbstractTraversalStrate
@Override
public void apply(final Traversal.Admin<?, ?> traversal, final TraversalEngine engine) {
- if (engine.equals(TraversalEngine.STANDARD))
+ if (engine.isStandard())
return;
- final Step<?, ?> endStep = traversal.getEndStep() instanceof ComputerAwareStep.EndStep ?
+ Step<?, ?> endStep = traversal.getEndStep() instanceof ComputerAwareStep.EndStep ?
((ComputerAwareStep.EndStep) traversal.getEndStep()).getPreviousStep() :
traversal.getEndStep();
+ if(endStep instanceof ComputerResultStep)
+ endStep = endStep.getPreviousStep();
for (final Step<?, ?> step : traversal.getSteps()) {
if ((step instanceof ReducingBarrierStep || step instanceof SupplyingBarrierStep) && (step != endStep || !(traversal.getParent() instanceof EmptyStep))) {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/util/EmptyGraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/util/EmptyGraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/util/EmptyGraphTraversal.java
index f0f1476..3a88dc2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/util/EmptyGraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/util/EmptyGraphTraversal.java
@@ -54,11 +54,6 @@ public final class EmptyGraphTraversal<S, E> extends EmptyTraversal<S, E> implem
}
@Override
- public GraphTraversal<S, E> submit(final GraphComputer computer) {
- return instance();
- }
-
- @Override
public GraphTraversal<S, E> iterate() {
return this;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversal.java
index 71bc6c9..ea03c89 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversal.java
@@ -18,12 +18,23 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal;
-import org.apache.tinkerpop.gremlin.process.*;
+import org.apache.tinkerpop.gremlin.process.Step;
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.TraversalSideEffects;
+import org.apache.tinkerpop.gremlin.process.TraversalStrategies;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.step.EmptyStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.Graph;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -36,14 +47,22 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
private final StepPosition stepPosition = new StepPosition();
protected List<Step> steps = new ArrayList<>();
- protected TraversalStrategies strategies;
protected TraversalSideEffects sideEffects = new DefaultTraversalSideEffects();
- protected TraversalEngine traversalEngine = null;
+ protected TraversalStrategies strategies;
+ protected TraversalEngine traversalEngine;
+
+ protected boolean locked = false;
protected TraversalParent traversalParent = (TraversalParent) EmptyStep.instance();
- public DefaultTraversal(final Class emanatingClass) {
- this.setStrategies(TraversalStrategies.GlobalCache.getStrategies(emanatingClass));
+ public DefaultTraversal(final Object emanatingObject) {
+ this.setStrategies(TraversalStrategies.GlobalCache.getStrategies(emanatingObject.getClass()));
+ if (emanatingObject instanceof Graph)
+ this.traversalEngine = ((Graph) emanatingObject).engine();
+ else if (emanatingObject instanceof Element)
+ this.traversalEngine = ((Element) emanatingObject).graph().engine();
+ else
+ this.traversalEngine = StandardTraversalEngine.instance();
}
@Override
@@ -52,29 +71,37 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
}
@Override
- public void applyStrategies(final TraversalEngine engine) throws IllegalStateException {
- if (null != this.traversalEngine) throw Traversal.Exceptions.traversalIsLocked();
-
+ public void applyStrategies() throws IllegalStateException {
+ if (this.locked) throw Traversal.Exceptions.traversalIsLocked();
TraversalHelper.reIdSteps(this.stepPosition, this);
- this.strategies.applyStrategies(this, engine);
+ this.strategies.applyStrategies(this, this.traversalEngine);
for (final Step<?, ?> step : this.getSteps()) {
if (step instanceof TraversalParent) {
- ((TraversalParent) step).setChildStrategies(this.strategies); // TODO: should we clone?
for (final Traversal.Admin<?, ?> globalChild : ((TraversalParent) step).getGlobalChildren()) {
- globalChild.applyStrategies(engine);
+ globalChild.setStrategies(this.strategies);
+ globalChild.setEngine(this.traversalEngine);
+ globalChild.applyStrategies();
}
for (final Traversal.Admin<?, ?> localChild : ((TraversalParent) step).getLocalChildren()) {
- localChild.applyStrategies(TraversalEngine.STANDARD);
+ localChild.setStrategies(this.strategies);
+ localChild.setEngine(StandardTraversalEngine.instance());
+ localChild.applyStrategies();
}
}
}
- this.traversalEngine = engine;
+ this.traversalEngine.processTraversal(this);
this.finalEndStep = this.getEndStep();
+ this.locked = true;
+ }
+
+ @Override
+ public TraversalEngine getEngine() {
+ return this.traversalEngine;
}
@Override
- public Optional<TraversalEngine> getEngine() {
- return Optional.ofNullable(this.traversalEngine);
+ public void setEngine(final TraversalEngine engine) {
+ this.traversalEngine = engine;
}
@Override
@@ -84,13 +111,13 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
@Override
public boolean hasNext() {
- if (null == this.traversalEngine) this.applyStrategies(TraversalEngine.STANDARD);
+ if (!this.locked) this.applyStrategies();
return this.lastEndCount > 0l || this.finalEndStep.hasNext();
}
@Override
public E next() {
- if (null == this.traversalEngine) this.applyStrategies(TraversalEngine.STANDARD);
+ if (!this.locked) this.applyStrategies();
if (this.lastEndCount > 0l) {
this.lastEndCount--;
return this.lastEnd;
@@ -115,13 +142,13 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
@Override
public void addStart(final Traverser<S> start) {
- if (null == this.traversalEngine) this.applyStrategies(TraversalEngine.STANDARD);
+ if (!this.locked) this.applyStrategies();
if (!this.steps.isEmpty()) this.steps.get(0).addStart(start);
}
@Override
public void addStarts(final Iterator<Traverser<S>> starts) {
- if (null == this.traversalEngine) this.applyStrategies(TraversalEngine.STANDARD);
+ if (!this.locked) this.applyStrategies();
if (!this.steps.isEmpty()) this.steps.get(0).addStarts(starts);
}
@@ -161,6 +188,11 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
}
@Override
+ public boolean isLocked() {
+ return this.locked;
+ }
+
+ @Override
public void setSideEffects(final TraversalSideEffects sideEffects) {
this.sideEffects = sideEffects;
}
@@ -186,7 +218,7 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
@Override
public <S2, E2> Traversal.Admin<S2, E2> addStep(final int index, final Step<?, ?> step) throws IllegalStateException {
- if (null != this.traversalEngine) throw Exceptions.traversalIsLocked();
+ if (this.locked) throw Exceptions.traversalIsLocked();
step.setId(this.stepPosition.nextXId());
this.steps.add(index, step);
final Step previousStep = this.steps.size() > 0 && index != 0 ? steps.get(index - 1) : null;
@@ -200,7 +232,7 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
@Override
public <S2, E2> Traversal.Admin<S2, E2> removeStep(final int index) throws IllegalStateException {
- if (null != this.traversalEngine) throw Exceptions.traversalIsLocked();
+ if (this.locked) throw Exceptions.traversalIsLocked();
final Step previousStep = this.steps.size() > 0 && index != 0 ? steps.get(index - 1) : null;
final Step nextStep = this.steps.size() > index + 1 ? steps.get(index + 1) : null;
this.steps.remove(index);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
new file mode 100644
index 0000000..e3974b5
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
@@ -0,0 +1,57 @@
+/*
+ * 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.tinkerpop.gremlin.process.traversal.engine;
+
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.EmptyStep;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ComputerTraversalEngine implements TraversalEngine {
+
+ private transient Graph graph;
+
+ private ComputerTraversalEngine() {
+
+ }
+
+ @Override
+ public void processTraversal(final Traversal.Admin<?, ?> traversal) {
+ if (traversal.getParent() instanceof EmptyStep)
+ traversal.addStep(new ComputerResultStep<>(traversal, this.graph.compute(), true));
+ }
+
+ @Override
+ public void setGraph(final Graph graph) {
+ this.graph = graph;
+ }
+
+ @Override
+ public Type getType() {
+ return Type.COMPUTER;
+ }
+
+ public static ComputerTraversalEngine instance() {
+ return new ComputerTraversalEngine();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java
new file mode 100644
index 0000000..4594ded
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java
@@ -0,0 +1,54 @@
+/*
+ * 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.tinkerpop.gremlin.process.traversal.engine;
+
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.TraversalEngine;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class StandardTraversalEngine implements TraversalEngine {
+
+ private static StandardTraversalEngine INSTANCE = new StandardTraversalEngine();
+
+ private StandardTraversalEngine() {
+
+ }
+
+ @Override
+ public void processTraversal(final Traversal.Admin<?, ?> traversal) {
+
+ }
+
+ @Override
+ public Type getType() {
+ return Type.STANDARD;
+ }
+
+ @Override
+ public void setGraph(final Graph graph) {
+
+ }
+
+ public static StandardTraversalEngine instance() {
+ return INSTANCE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
index 9985178..186a19b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
@@ -25,15 +25,15 @@ import org.apache.tinkerpop.gremlin.process.TraversalSideEffects;
import org.apache.tinkerpop.gremlin.process.TraversalStrategies;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.TraverserGenerator;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import org.apache.tinkerpop.gremlin.process.traverser.O_TraverserGenerator;
+import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.step.EmptyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversalSideEffects;
import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversalStrategies;
+import org.apache.tinkerpop.gremlin.process.traverser.O_TraverserGenerator;
import java.util.Collections;
import java.util.List;
-import java.util.Optional;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -61,13 +61,13 @@ public abstract class AbstractLambdaTraversal<S, E> implements Traversal.Admin<S
}
@Override
- public void applyStrategies(final TraversalEngine engine) throws IllegalStateException {
+ public void applyStrategies() throws IllegalStateException {
}
@Override
- public Optional<TraversalEngine> getEngine() {
- return Optional.of(TraversalEngine.STANDARD);
+ public TraversalEngine getEngine() {
+ return StandardTraversalEngine.instance();
}
@Override
@@ -120,7 +120,18 @@ public abstract class AbstractLambdaTraversal<S, E> implements Traversal.Admin<S
return true;
}
+ @Override
public void addStart(final Traverser<S> start) {
}
+ @Override
+ public boolean isLocked() {
+ return true;
+ }
+
+ @Override
+ public void setEngine(final TraversalEngine engine) {
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java
index a1d6ff6..3e7a15f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java
@@ -120,16 +120,26 @@ public final class HasNextTraversal<S> implements Traversal.Admin<S, Boolean> {
}
@Override
- public void applyStrategies(final TraversalEngine engine) throws IllegalStateException {
- this.hasNextTraversal.applyStrategies(engine);
+ public boolean isLocked() {
+ return true;
+ }
+
+ @Override
+ public void applyStrategies() throws IllegalStateException {
+ this.hasNextTraversal.applyStrategies();
}
@Override
- public Optional<TraversalEngine> getEngine() {
+ public TraversalEngine getEngine() {
return this.hasNextTraversal.getEngine();
}
@Override
+ public void setEngine(final TraversalEngine engine) {
+
+ }
+
+ @Override
public void reset() {
this.hasNextTraversal.reset();
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java
index e368918..f78a8b6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java
@@ -26,6 +26,7 @@ import org.apache.tinkerpop.gremlin.process.TraversalStrategies;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.TraverserGenerator;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
+import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.FastNoSuchElementException;
@@ -75,13 +76,18 @@ public class EmptyTraversal<S, E> implements Traversal.Admin<S, E> {
}
@Override
- public void applyStrategies(final TraversalEngine engine) {
+ public void applyStrategies() {
}
@Override
- public Optional<TraversalEngine> getEngine() {
- return Optional.empty();
+ public TraversalEngine getEngine() {
+ return StandardTraversalEngine.instance();
+ }
+
+ @Override
+ public void setEngine(final TraversalEngine engine) {
+
}
@Override
@@ -105,13 +111,13 @@ public class EmptyTraversal<S, E> implements Traversal.Admin<S, E> {
}
@Override
- public Traversal<S, E> submit(final GraphComputer computer) {
+ public EmptyTraversal<S, E> clone() throws CloneNotSupportedException {
return instance();
}
@Override
- public EmptyTraversal<S, E> clone() throws CloneNotSupportedException {
- return instance();
+ public boolean isLocked() {
+ return true;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
index 61735d8..d03b666 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
@@ -18,12 +18,14 @@
*/
package org.apache.tinkerpop.gremlin.structure;
+import org.apache.commons.configuration.Configuration;
import org.apache.tinkerpop.gremlin.process.T;
import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.DefaultGraphTraversal;
import org.apache.tinkerpop.gremlin.process.graph.traversal.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.GraphStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.DefaultGraphTraversal;
import org.apache.tinkerpop.gremlin.structure.io.DefaultIo;
import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLReader;
import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLWriter;
@@ -37,7 +39,6 @@ import org.apache.tinkerpop.gremlin.structure.strategy.GraphStrategy;
import org.apache.tinkerpop.gremlin.structure.strategy.SequenceStrategy;
import org.apache.tinkerpop.gremlin.structure.strategy.StrategyGraph;
import org.apache.tinkerpop.gremlin.structure.util.FeatureDescriptor;
-import org.apache.commons.configuration.Configuration;
import org.javatuples.Pair;
import java.io.IOException;
@@ -139,7 +140,7 @@ public interface Graph extends AutoCloseable {
* @return a graph traversal over the vertices of the graph
*/
public default GraphTraversal<Vertex, Vertex> V(final Object... vertexIds) {
- final GraphTraversal.Admin<Vertex, Vertex> traversal = new DefaultGraphTraversal<>(this.getClass());
+ final GraphTraversal.Admin<Vertex, Vertex> traversal = new DefaultGraphTraversal<>(this);
return traversal.addStep(new GraphStep<>(traversal, this, Vertex.class, vertexIds));
}
@@ -151,7 +152,7 @@ public interface Graph extends AutoCloseable {
* @return a graph traversal over the edges of the graph
*/
public default GraphTraversal<Edge, Edge> E(final Object... edgeIds) {
- final GraphTraversal.Admin<Edge, Edge> traversal = new DefaultGraphTraversal<>(this.getClass());
+ final GraphTraversal.Admin<Edge, Edge> traversal = new DefaultGraphTraversal<>(this);
return traversal.addStep(new GraphStep<>(traversal, this, Edge.class, edgeIds));
}
@@ -178,6 +179,11 @@ public interface Graph extends AutoCloseable {
*/
public GraphComputer compute(final Class... graphComputerClass);
+ public TraversalEngine engine();
+
+ public void engine(final TraversalEngine engine);
+
+
/**
* Configure and control the transactions for those graphs that support this feature.
*/
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/strategy/PartitionStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/strategy/PartitionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/strategy/PartitionStrategy.java
index 5886d3c..c05aa74 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/strategy/PartitionStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/strategy/PartitionStrategy.java
@@ -24,6 +24,7 @@ import org.apache.tinkerpop.gremlin.process.graph.traversal.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.HasStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.DefaultGraphTraversal;
import org.apache.tinkerpop.gremlin.process.graph.util.HasContainer;
+import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
import org.apache.tinkerpop.gremlin.process.traverser.util.DefaultTraverserGeneratorFactory;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.Contains;
@@ -124,7 +125,7 @@ public final class PartitionStrategy implements GraphStrategy {
@Override
public UnaryOperator<Function<Object[], GraphTraversal<Vertex, Vertex>>> getGraphVStrategy(final StrategyContext<StrategyGraph> ctx, final GraphStrategy composingStrategy) {
return (f) -> ids -> {
- final GraphTraversal<Vertex, Vertex> traversal = this.generateTraversal(ctx.getStrategyGraph().getBaseGraph().getClass());
+ final GraphTraversal<Vertex, Vertex> traversal = this.generateTraversal(ctx.getStrategyGraph().getBaseGraph());
traversal.asAdmin().getStrategies().setTraverserGeneratorFactory(DefaultTraverserGeneratorFactory.instance());
TraversalHelper.insertTraversal(0, f.apply(ids).has(this.partitionKey, Contains.within, getReadPartitions()).asAdmin(), traversal.asAdmin());
return traversal.filter(vertex -> testVertex(vertex.get()));
@@ -134,7 +135,7 @@ public final class PartitionStrategy implements GraphStrategy {
@Override
public UnaryOperator<Function<Object[], GraphTraversal<Edge, Edge>>> getGraphEStrategy(final StrategyContext<StrategyGraph> ctx, final GraphStrategy composingStrategy) {
return (f) -> ids -> {
- final GraphTraversal<Edge, Edge> traversal = this.generateTraversal(ctx.getStrategyGraph().getBaseGraph().getClass());
+ final GraphTraversal<Edge, Edge> traversal = this.generateTraversal(ctx.getStrategyGraph().getBaseGraph());
traversal.asAdmin().getStrategies().setTraverserGeneratorFactory(DefaultTraverserGeneratorFactory.instance());
TraversalHelper.insertTraversal(0, f.apply(ids).has(this.partitionKey, Contains.within, getReadPartitions()).asAdmin(), traversal.asAdmin());
return traversal.filter(edge -> testEdge(edge.get()));
@@ -172,8 +173,8 @@ public final class PartitionStrategy implements GraphStrategy {
}
}
- private final <S, E> GraphTraversal<S, E> generateTraversal(final Class emanatingClass) {
- return new DefaultGraphTraversal<S, E>(emanatingClass) {
+ private final <S, E> GraphTraversal<S, E> generateTraversal(final Object emanatingObject) {
+ return new DefaultGraphTraversal<S, E>(emanatingObject) {
@Override
public GraphTraversal<S, Vertex> to(final Direction direction, final String... edgeLabels) {
return direction.equals(Direction.BOTH) ?
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/strategy/StrategyGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/strategy/StrategyGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/strategy/StrategyGraph.java
index 6e7a8dd..4f0ebd0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/strategy/StrategyGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/strategy/StrategyGraph.java
@@ -19,6 +19,7 @@
package org.apache.tinkerpop.gremlin.structure.strategy;
import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.graph.traversal.GraphTraversal;
import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -128,6 +129,16 @@ public class StrategyGraph implements Graph, Graph.Iterators, StrategyWrapped, W
}
@Override
+ public TraversalEngine engine() {
+ return this.baseGraph.engine();
+ }
+
+ @Override
+ public void engine(final TraversalEngine engine) {
+ this.baseGraph.engine(engine);
+ }
+
+ @Override
public Transaction tx() {
return this.baseGraph.tx();
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/batch/BatchGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/batch/BatchGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/batch/BatchGraph.java
index 7278db5..f4387a9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/batch/BatchGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/batch/BatchGraph.java
@@ -20,9 +20,11 @@ package org.apache.tinkerpop.gremlin.structure.util.batch;
import org.apache.tinkerpop.gremlin.process.T;
import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.graph.traversal.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.graph.traversal.VertexTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Element;
@@ -254,6 +256,16 @@ public class BatchGraph<G extends Graph> implements Graph, Graph.Iterators {
}
@Override
+ public TraversalEngine engine() {
+ return StandardTraversalEngine.instance();
+ }
+
+ @Override
+ public void engine(final TraversalEngine engine) {
+
+ }
+
+ @Override
public Transaction tx() {
return this.batchTransaction;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d70378f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/empty/EmptyGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/empty/EmptyGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/empty/EmptyGraph.java
index 37070b5..1e543a0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/empty/EmptyGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/empty/EmptyGraph.java
@@ -19,9 +19,11 @@
package org.apache.tinkerpop.gremlin.structure.util.empty;
import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.graph.traversal.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.graph.traversal.util.EmptyGraphTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -74,6 +76,16 @@ public final class EmptyGraph implements Graph, Graph.Iterators {
}
@Override
+ public TraversalEngine engine() {
+ return StandardTraversalEngine.instance();
+ }
+
+ @Override
+ public void engine(final TraversalEngine engine) {
+
+ }
+
+ @Override
public Transaction tx() {
throw new IllegalStateException(MESSAGE);
}