Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1760 [created] c167d9ea7
tweaked how TraversalParent children are processed in ComputerVerifiationStrategy. Given the outside-in nature of Gremlin compilation, we were analyzing child traversals that were, in fact, not compiled yet. We now check for local star graph issues on a per traversal level. I can't believe we didn't run into other problems before this. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/c167d9ea Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/c167d9ea Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/c167d9ea Branch: refs/heads/TINKERPOP-1760 Commit: c167d9ea779ee2229e5cd56e35a37a6fd225ffc9 Parents: 7c954e9 Author: Marko A. Rodriguez <[email protected]> Authored: Mon Aug 28 10:58:34 2017 -0600 Committer: Marko A. Rodriguez <[email protected]> Committed: Mon Aug 28 10:58:34 2017 -0600 ---------------------------------------------------------------------- .../ComputerVerificationStrategy.java | 24 ++++++-------------- .../ComputerVerificationStrategyTest.java | 4 ++++ 2 files changed, 11 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c167d9ea/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 3a3c6e2..2d076b6 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 @@ -26,7 +26,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy; import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating; import org.apache.tinkerpop.gremlin.process.traversal.step.PathProcessor; -import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent; import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep; import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectStep; import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SubgraphStep; @@ -38,7 +37,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper; import java.util.Arrays; import java.util.HashSet; -import java.util.Optional; import java.util.Set; /** @@ -56,7 +54,6 @@ public final class ComputerVerificationStrategy extends AbstractTraversalStrateg @Override public void apply(final Traversal.Admin<?, ?> traversal) { - if (!TraversalHelper.onGraphComputer(traversal)) return; @@ -67,27 +64,20 @@ public final class ComputerVerificationStrategy extends AbstractTraversalStrateg throw new VerificationException("Profiling a multi-VertexProgramStep traversal is currently not supported on GraphComputer", traversal); } - for (final Step<?, ?> step : traversal.getSteps()) { - - // you can not traverse past the local star graph with localChildren (e.g. by()-modulators). - if (step instanceof TraversalParent) { - final Optional<Traversal.Admin<Object, Object>> traversalOptional = ((TraversalParent) step).getLocalChildren().stream() - .filter(t -> !TraversalHelper.isLocalStarGraph(t.asAdmin())) - .findAny(); - if (traversalOptional.isPresent()) - throw new VerificationException("Local traversals may not traverse past the local star-graph on GraphComputer: " + traversalOptional.get(), traversal); - } + // this is a problem because sideEffect.merge() is transient on the OLAP reduction + if (TraversalHelper.getRootTraversal(traversal).getTraverserRequirements().contains(TraverserRequirement.ONE_BULK)) + throw new VerificationException("One bulk is currently not supported on GraphComputer: " + traversal, traversal); - // this is a problem because sideEffect.merge() is transient on the OLAP reduction - if (TraversalHelper.getRootTraversal(traversal).getTraverserRequirements().contains(TraverserRequirement.ONE_BULK)) - throw new VerificationException("One bulk is currently not supported on GraphComputer: " + step, traversal); + // you can not traverse past the local star graph with localChildren (e.g. by()-modulators). + if (!TraversalHelper.isGlobalChild(traversal) && !TraversalHelper.isLocalStarGraph(traversal)) + throw new VerificationException("Local traversals may not traverse past the local star-graph on GraphComputer: " + traversal, traversal); + for (final Step<?, ?> step : traversal.getSteps()) { if (step instanceof PathProcessor && ((PathProcessor) step).getMaxRequirement() != PathProcessor.ElementRequirement.ID) throw new VerificationException("It is not possible to access more than a path element's id on GraphComputer: " + step + " requires " + ((PathProcessor) step).getMaxRequirement(), traversal); if (UNSUPPORTED_STEPS.stream().filter(c -> c.isAssignableFrom(step.getClass())).findFirst().isPresent()) throw new VerificationException("The following step is currently not supported on GraphComputer: " + step, traversal); - } Step<?, ?> nextParentStep = traversal.getParent().asStep(); http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c167d9ea/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 da41881..e594bd4 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 @@ -23,6 +23,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.P; 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.strategy.decoration.ConnectiveStrategy; +import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.AdjacentToIncidentStrategy; import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies; import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal; import org.junit.Test; @@ -34,6 +36,7 @@ import java.util.Arrays; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.max; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.min; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out; +import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.sum; import static org.junit.Assert.fail; @@ -53,6 +56,7 @@ public class ComputerVerificationStrategyTest { {"__.values(\"age\").union(max(), min(), sum())", __.values("age").union(max(), min(), sum()), true}, {"__.count().sum()", __.count().sum(), true}, {"__.where(\"a\",eq(\"b\")).out()", __.where("a", P.eq("b")).out(), true}, + {"__.where(and(outE(\"knows\"),outE(\"created\"))).values(\"name\")", __.where(__.and(outE("knows"), outE("created"))).values("name"), true}, }); }
