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 2016/02/13 16:34:59 UTC
[05/17] incubator-tinkerpop git commit: okay.
TraversalVertexProgramStep is just like any other step. Nothing 'special'.
Its a TraversalParent with one global child -- the traversal to be executed
on the GraphComputer. I got rid of TraversalSideEffects.o
okay. TraversalVertexProgramStep is just like any other step. Nothing 'special'. Its a TraversalParent with one global child -- the traversal to be executed on the GraphComputer. I got rid of TraversalSideEffects.onGraphComputer() as again, a traversal can now have OLTP and OLAP components. In its place, we have TraversalHelper.onGraphComputer(traversal) which will tell you if a parent of the traversal is a TraversalVertexProgramStep. this model is really really nice as it all falls within the natural construts of our Traversal API -- no new interfaces needed, no weird two sets of strategies, no weird two sets of sideEffects... Its really clean.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/080863a5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/080863a5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/080863a5
Branch: refs/heads/master
Commit: 080863a5837d94417b9f9fc17d0476defab56e63
Parents: 6cbd8a5
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Feb 10 15:23:02 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Feb 10 15:23:02 2016 -0700
----------------------------------------------------------------------
.../GephiTraversalVisualizationStrategy.groovy | 2 +-
.../traversal/step/map/ComputerResultStep.java | 4 +--
.../step/map/TraversalVertexProgramStep.java | 33 ++++++++++----------
.../gremlin/process/traversal/Traversal.java | 2 +-
.../process/traversal/TraversalStrategies.java | 4 ---
.../dsl/graph/GraphTraversalSource.java | 2 +-
.../traversal/step/sideEffect/ProfileStep.java | 5 +--
.../decoration/RequirementsStrategy.java | 6 ++++
.../finalization/LazyBarrierStrategy.java | 2 +-
.../TraversalVertexProgramStrategy.java | 7 +++--
.../optimization/MatchPredicateStrategy.java | 2 +-
.../ComputerVerificationStrategy.java | 12 ++++---
.../traversal/util/DefaultTraversal.java | 2 +-
.../process/traversal/util/TraversalHelper.java | 11 +++++++
.../ComputerVerificationStrategyTest.java | 3 ++
.../traversal/step/sideEffect/ProfileTest.java | 3 +-
.../optimization/Neo4jGraphStepStrategy.java | 3 --
.../optimization/TinkerGraphStepStrategy.java | 2 +-
.../structure/TinkerGraphPlayTest.java | 2 +-
19 files changed, 64 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy
index 9f3c843..319500e 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy
@@ -66,7 +66,7 @@ class GephiTraversalVisualizationStrategy extends AbstractTraversalStrategy<Trav
@Override
void apply(final Traversal.Admin<?, ?> traversal) {
- if (traversal.getStrategies().onGraphComputer())
+ if (TraversalHelper.onGraphComputer(traversal))
return
// only apply these strategies if the traversal was :submit to the acceptor - otherwise process as usual
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/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 227163d..323f9d8 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
@@ -32,9 +32,9 @@ import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.util.Attachable;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+import org.apache.tinkerpop.gremlin.util.iterator.EmptyIterator;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Iterator;
@@ -50,7 +50,7 @@ public final class ComputerResultStep<S> extends AbstractStep<ComputerResult, S>
private final boolean attachElements; // should be part of graph computer with "propagate properties"
- private Iterator<Traverser.Admin<S>> currentIterator = Collections.emptyIterator();
+ private Iterator<Traverser.Admin<S>> currentIterator = EmptyIterator.instance();
public ComputerResultStep(final Traversal.Admin traversal, final boolean attachElements) {
super(traversal);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
index dba99ef..f9eb461 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
@@ -24,41 +24,39 @@ import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.TraversalVertexProgramStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+import java.util.Collections;
+import java.util.List;
import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class TraversalVertexProgramStep<S> extends AbstractStep<S, ComputerResult> {
+public final class TraversalVertexProgramStep<S> extends AbstractStep<S, ComputerResult> implements TraversalParent {
public Traversal.Admin<S, ?> computerTraversal;
- private final GraphComputer graphComputer;
+ private final transient GraphComputer graphComputer;
private boolean first = true;
public TraversalVertexProgramStep(final Traversal.Admin traversal, final Traversal.Admin<S, ?> computerTraversal, final GraphComputer graphComputer) {
super(traversal);
this.graphComputer = graphComputer;
- this.computerTraversal = computerTraversal;
- this.computerTraversal.getSideEffects().mergeInto(this.getTraversal().getSideEffects());
- this.computerTraversal.setSideEffects(this.getTraversal().getSideEffects());
- TraversalStrategies strategies = this.getTraversal().getStrategies().clone();
- strategies.removeStrategies(TraversalVertexProgramStrategy.class);
- strategies.addStrategies(ComputerVerificationStrategy.instance());
- this.computerTraversal.setStrategies(strategies);
- this.computerTraversal.applyStrategies();
+ this.computerTraversal = this.integrateChild(computerTraversal);
+ }
+
+ public List<Traversal.Admin<?, ?>> getGlobalChildren() {
+ return Collections.singletonList(this.computerTraversal);
}
@Override
protected Traverser<ComputerResult> processNextStart() {
+
if (this.first) { // && previousStep EmptyStep
try {
this.first = false;
@@ -73,17 +71,18 @@ public final class TraversalVertexProgramStep<S> extends AbstractStep<S, Compute
@Override
public String toString() {
- return StringFactory.stepString(this, this.computerTraversal);
+ return StringFactory.stepString(this, this.computerTraversal, this.graphComputer);
}
- /*@Override
+ @Override
public TraversalVertexProgramStep<S> clone() {
final TraversalVertexProgramStep<S> clone = (TraversalVertexProgramStep<S>) super.clone();
clone.computerTraversal = this.integrateChild(this.computerTraversal.clone());
return clone;
- }*/
+ }
+ @Override
public Set<TraverserRequirement> getRequirements() {
- return this.computerTraversal.getTraverserRequirements();
+ return TraversalParent.super.getSelfAndChildRequirements(TraverserRequirement.BULK);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java
index c4016a7..66c3728 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java
@@ -365,7 +365,7 @@ public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable {
requirements.add(TraverserRequirement.SIDE_EFFECTS);
if (null != this.getSideEffects().getSackInitialValue())
requirements.add(TraverserRequirement.SACK);
- if (this.getStrategies().onGraphComputer())
+ if (TraversalHelper.onGraphComputer(this))
requirements.add(TraverserRequirement.BULK);
if (requirements.contains(TraverserRequirement.ONE_BULK))
requirements.remove(TraverserRequirement.BULK);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
index a6c1a1e..c8eb617 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
@@ -62,10 +62,6 @@ public interface TraversalStrategies extends Serializable, Cloneable {
*/
public List<TraversalStrategy<?>> toList();
- public default boolean onGraphComputer() {
- return toList().stream().filter(strategy -> strategy instanceof ComputerVerificationStrategy).findAny().isPresent();
- }
-
/**
* Apply all the {@link TraversalStrategy} optimizers to the {@link Traversal} for the stated {@link TraversalEngine}.
* This method must ensure that the strategies are sorted prior to application.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
index 17207c4..97c3f19 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
@@ -99,7 +99,7 @@ public class GraphTraversalSource implements TraversalSource {
@Override
public GraphTraversalSource withComputer(final Function<Graph, GraphComputer> graphComputerFunction) {
final GraphTraversalSource clone = this.clone();
- clone.strategies.addStrategies(new TraversalVertexProgramStrategy(graphComputerFunction));
+ clone.strategies.addStrategies(new TraversalVertexProgramStrategy(graphComputerFunction), ComputerVerificationStrategy.instance());
return clone;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/ProfileStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/ProfileStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/ProfileStep.java
index ab8e2ae..5b468dc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/ProfileStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/ProfileStep.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect;
import org.apache.tinkerpop.gremlin.process.computer.KeyValue;
import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
import org.apache.tinkerpop.gremlin.process.computer.traversal.VertexTraversalSideEffects;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
@@ -104,7 +105,7 @@ public final class ProfileStep<S> extends AbstractStep<S, S> implements MapReduc
if (traversalMetrics == null) {
// look up the TraversalMetrics in the root traversal's sideEffects
Traversal t = this.getTraversal();
- while (!(t.asAdmin().getParent() instanceof EmptyStep)) {
+ while (!(t.asAdmin().getParent() instanceof TraversalVertexProgramStep)) {
t = t.asAdmin().getParent().asStep().getTraversal();
}
traversalMetrics = t.asAdmin().getSideEffects().<StandardTraversalMetrics>get(TraversalMetrics.METRICS_KEY).get();
@@ -117,7 +118,7 @@ public final class ProfileStep<S> extends AbstractStep<S, S> implements MapReduc
return;
}
- if (!(this.getTraversal().getParent() instanceof EmptyStep)) {
+ if (!(this.getTraversal().getParent() instanceof TraversalVertexProgramStep) && !(this.getTraversal().getParent() instanceof EmptyStep)) {
// Initialization is handled at the top-level of the traversal only.
return;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java
index bfd4853..efb28bf 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java
@@ -25,8 +25,10 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.RequirementsStep;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.TraversalVertexProgramStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@@ -56,4 +58,8 @@ public final class RequirementsStrategy extends AbstractTraversalStrategy<Traver
strategy.requirements.add(requirement);
}
}
+
+ public Set<Class<? extends DecorationStrategy>> applyPost() {
+ return Collections.singleton(TraversalVertexProgramStrategy.class);
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/LazyBarrierStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/LazyBarrierStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/LazyBarrierStrategy.java
index c7cc700..4a9ed8a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/LazyBarrierStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/LazyBarrierStrategy.java
@@ -61,7 +61,7 @@ public final class LazyBarrierStrategy extends AbstractTraversalStrategy<Travers
@Override
public void apply(final Traversal.Admin<?, ?> traversal) {
- if (traversal.getStrategies().onGraphComputer())
+ if (TraversalHelper.onGraphComputer(traversal))
return;
if (traversal.getTraverserRequirements().contains(TraverserRequirement.PATH))
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/TraversalVertexProgramStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/TraversalVertexProgramStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/TraversalVertexProgramStrategy.java
index 60cfa53..29da95e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/TraversalVertexProgramStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/TraversalVertexProgramStrategy.java
@@ -30,6 +30,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversal
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -53,15 +54,17 @@ public final class TraversalVertexProgramStrategy extends AbstractTraversalStrat
@Override
public void apply(final Traversal.Admin<?, ?> traversal) {
- traversal.addTraverserRequirement(TraverserRequirement.BULK); // all computer traversals require bulking
if (traversal.getParent() instanceof EmptyStep) {
if (null != this.graphComputerFunction) { // if the function is null, then its been serialized and thus, already in a graph computer
Traversal.Admin<?, ?> newTraversal = new DefaultTraversal<>();
TraversalHelper.removeToTraversal(traversal.getStartStep(), EmptyStep.instance(), (Traversal.Admin) newTraversal);
traversal.addStep(new TraversalVertexProgramStep<>(traversal, newTraversal, this.graphComputerFunction.apply(traversal.getGraph().get())));
traversal.addStep(new ComputerResultStep<>(traversal, true));
- } else {
+ } else { // this is a total hack to trick the difference between TraversalVertexProgram via GraphComputer and via TraversalSource. :|
+ traversal.setParent(new TraversalVertexProgramStep<>(EmptyTraversal.instance(),EmptyTraversal.instance(),null));
ComputerVerificationStrategy.instance().apply(traversal);
+ traversal.setParent(EmptyStep.instance());
+ traversal.addTraverserRequirement(TraverserRequirement.BULK);
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchPredicateStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchPredicateStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchPredicateStrategy.java
index c060ef6..f025749 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchPredicateStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchPredicateStrategy.java
@@ -80,7 +80,7 @@ public final class MatchPredicateStrategy extends AbstractTraversalStrategy<Trav
traversal.removeStep(nextStep);
matchStep.addGlobalChild(new DefaultTraversal<>().addStep(nextStep));
nextStep = matchStep.getNextStep();
- } else if (nextStep instanceof DedupGlobalStep && !((DedupGlobalStep) nextStep).getScopeKeys().isEmpty() && ((DedupGlobalStep) nextStep).getLocalChildren().isEmpty() && !traversal.getStrategies().onGraphComputer()) {
+ } else if (nextStep instanceof DedupGlobalStep && !((DedupGlobalStep) nextStep).getScopeKeys().isEmpty() && ((DedupGlobalStep) nextStep).getLocalChildren().isEmpty() && !TraversalHelper.onGraphComputer(traversal)) {
traversal.removeStep(nextStep);
matchStep.setDedupLabels(((DedupGlobalStep<?>) nextStep).getScopeKeys());
nextStep = matchStep.getNextStep();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
index 40ceb58..b8b8be4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
@@ -18,6 +18,7 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
@@ -43,7 +44,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SubgraphStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.CollectingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.ComputerAwareStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.SupplyingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
@@ -82,12 +83,15 @@ public final class ComputerVerificationStrategy extends AbstractTraversalStrateg
@Override
public void apply(final Traversal.Admin<?, ?> traversal) {
- if (traversal.getParent().isLocalChild(traversal)) // only process global children as local children are standard semantics
+ if (!TraversalHelper.onGraphComputer(traversal) || traversal.getParent().isLocalChild(traversal)) // only process global children as local children are standard semantics
return;
Step<?, ?> endStep = traversal.getEndStep();
+ while (endStep instanceof ComputerAwareStep.EndStep) {
+ endStep = endStep.getPreviousStep();
+ }
- if (traversal.getParent() instanceof EmptyStep) {
+ if (traversal.getParent() instanceof TraversalVertexProgramStep) {
if (!(traversal.getStartStep() instanceof GraphStep))
throw new VerificationException("GraphComputer does not support traversals starting from a non-GraphStep: " + traversal.getStartStep(), traversal);
///
@@ -108,7 +112,7 @@ public final class ComputerVerificationStrategy extends AbstractTraversalStrateg
}
for (final Step<?, ?> step : traversal.getSteps()) {
- if ((step instanceof ReducingBarrierStep || step instanceof SupplyingBarrierStep || step instanceof OrderGlobalStep || step instanceof RangeGlobalStep || step instanceof TailGlobalStep || step instanceof DedupGlobalStep) && (step != endStep || !(traversal.getParent() instanceof EmptyStep)))
+ if ((step instanceof ReducingBarrierStep || step instanceof SupplyingBarrierStep || step instanceof OrderGlobalStep || step instanceof RangeGlobalStep || step instanceof TailGlobalStep || step instanceof DedupGlobalStep) && (step != endStep || !(traversal.getParent() instanceof TraversalVertexProgramStep)))
throw new VerificationException("Global traversals on GraphComputer may not contain mid-traversal barriers: " + step, traversal);
if (step instanceof DedupGlobalStep && !((DedupGlobalStep) step).getLocalChildren().isEmpty())
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
index b05089b..d783f43 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
@@ -109,7 +109,7 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
requirements.add(TraverserRequirement.SIDE_EFFECTS);
if (null != this.getSideEffects().getSackInitialValue())
requirements.add(TraverserRequirement.SACK);
- if (this.strategies.onGraphComputer())
+ if (TraversalHelper.onGraphComputer(this))
requirements.add(TraverserRequirement.BULK);
if (requirements.contains(TraverserRequirement.ONE_BULK))
requirements.remove(TraverserRequirement.BULK);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
index cd7b740..f35496a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
@@ -18,6 +18,7 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.util;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.step.HasContainerHolder;
@@ -467,4 +468,14 @@ public final class TraversalHelper {
return variables;
}
+ public static boolean onGraphComputer(Traversal.Admin<?, ?> traversal) {
+ if (traversal.getParent().asStep() instanceof TraversalVertexProgramStep)
+ return true;
+ while (!((traversal.getParent()) instanceof EmptyStep)) {
+ if (traversal.getParent().asStep() instanceof TraversalVertexProgramStep)
+ return true;
+ traversal = traversal.getParent().asStep().getTraversal();
+ }
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java
index 5b221d6..61abfd4 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java
@@ -18,10 +18,12 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
+import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -58,6 +60,7 @@ public class ComputerVerificationStrategyTest {
try {
final TraversalStrategies strategies = new DefaultTraversalStrategies();
strategies.addStrategies(ComputerVerificationStrategy.instance());
+ traversal.asAdmin().setParent(new TraversalVertexProgramStep<>(EmptyTraversal.instance(), EmptyTraversal.instance(), null)); // trick it
traversal.asAdmin().setStrategies(strategies);
traversal.asAdmin().applyStrategies();
fail("The strategy should not allow traversal: " + this.traversal);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/ProfileTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/ProfileTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/ProfileTest.java
index 39e012d..44bb7f6 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/ProfileTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/ProfileTest.java
@@ -33,6 +33,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.FlatMapStep;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RangeByIsCountStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
import org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.junit.Test;
@@ -298,7 +299,7 @@ public abstract class ProfileTest extends AbstractGremlinProcessTest {
t.iterate();
assertTrue(mockStep.callbackCalled);
- if (!t.asAdmin().getStrategies().onGraphComputer()) {
+ if (!TraversalHelper.onGraphComputer(t.asAdmin())) {
final TraversalMetrics traversalMetrics = t.asAdmin().getSideEffects().<TraversalMetrics>get(TraversalMetrics.METRICS_KEY).get();
assertEquals(100, traversalMetrics.getMetrics(3).getCount("bogusCount").longValue());
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/strategy/optimization/Neo4jGraphStepStrategy.java
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/strategy/optimization/Neo4jGraphStepStrategy.java b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/strategy/optimization/Neo4jGraphStepStrategy.java
index 71712fd..f468414 100644
--- a/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/strategy/optimization/Neo4jGraphStepStrategy.java
+++ b/neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/strategy/optimization/Neo4jGraphStepStrategy.java
@@ -40,9 +40,6 @@ public final class Neo4jGraphStepStrategy extends AbstractTraversalStrategy<Trav
@Override
public void apply(final Traversal.Admin<?, ?> traversal) {
- if (traversal.getStrategies().onGraphComputer())
- return;
-
TraversalHelper.getStepsOfClass(GraphStep.class, traversal).forEach(originalGraphStep -> {
final Neo4jGraphStep<?, ?> neo4jGraphStep = new Neo4jGraphStep<>(originalGraphStep);
TraversalHelper.replaceStep(originalGraphStep, (Step) neo4jGraphStep, traversal);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java
index 6347fe7..c01dec5 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphStepStrategy.java
@@ -39,7 +39,7 @@ public final class TinkerGraphStepStrategy extends AbstractTraversalStrategy<Tra
@Override
public void apply(final Traversal.Admin<?, ?> traversal) {
- if (traversal.getStrategies().onGraphComputer())
+ if (TraversalHelper.onGraphComputer(traversal))
return;
TraversalHelper.getStepsOfClass(GraphStep.class, traversal).forEach(originalGraphStep -> {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/080863a5/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
index da4f357..773a5ae 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
@@ -69,7 +69,7 @@ public class TinkerGraphPlayTest {
Graph graph = TinkerFactory.createModern();
GraphTraversalSource g = graph.traversal().withComputer(); //GraphTraversalSource.computer());
//System.out.println(g.V().outE("knows").identity().inV().count().is(P.eq(5)).explain());
- System.out.println(g.V().repeat(groupCount("m").by("name").out()).times(2).cap("m").toList());
+ System.out.println(g.withBulk(false).withSack(1, Operator.sum).V().out().barrier().sack().toList());
}