Created
March 22, 2018 14:19
-
-
Save robertdale/8b5fa41432d29b3e99bf5ff2515dff3d to your computer and use it in GitHub Desktop.
TINKERPOP-1682 by-modulator optimization strategy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CODE: | |
@Test | |
public void shouldApplyStrategiesCorrectly() { | |
Traversal.Admin<?, ?> traversal = __.out().count().asAdmin(); | |
traversal.setStrategies(TraversalStrategies.GlobalCache.getStrategies(Graph.class)); | |
int found = 0; | |
for (final String line : traversal.explain().toString().split("\n")) { | |
if (line.contains("AdjacentToIncidentStrategy") && line.contains("[VertexStep(OUT,edge)")) | |
found++; | |
} | |
assertEquals(1, found); | |
/// | |
traversal = __.out().group().by(__.in().count()).asAdmin(); | |
traversal.setStrategies(TraversalStrategies.GlobalCache.getStrategies(Graph.class).clone()); | |
found = 0; | |
for (final String line : traversal.explain().toString().split("\n")) { | |
if (line.contains("AdjacentToIncidentStrategy") && line.contains("[VertexStep(IN,edge)")) | |
found++; | |
} | |
assertEquals(1, found); | |
/// | |
traversal = __.outE().inV().group().by(__.inE().outV().groupCount().by(__.both().count().is(P.gt(2)))).asAdmin(); | |
traversal.setStrategies(TraversalStrategies.GlobalCache.getStrategies(Graph.class).clone()); | |
System.out.println("FIRST: " + traversal.explain()); | |
found = 0; | |
for (final String line : traversal.explain().toString().split("]\n")) { // need to split cause of word wrap | |
System.out.println(line + "\n\n"); | |
if (line.contains("IncidentToAdjacentStrategy") && line.contains("[VertexStep(IN,vertex)")) { | |
found++; | |
System.out.println("FOUND"); | |
} | |
if (line.contains("IncidentToAdjacentStrategy") && line.contains("[VertexStep(OUT,vertex)")) { | |
found++; | |
System.out.println("FOUND"); | |
} | |
if (line.contains("AdjacentToIncidentStrategy") && line.contains("[VertexStep(BOTH,edge)")) { | |
found++; | |
System.out.println("FOUND"); | |
} | |
if (line.contains("CountStrategy") && line.contains("RangeGlobalStep(0,3)")) { | |
found++; | |
System.out.println("FOUND"); | |
} | |
} | |
assertEquals(4, found); | |
// | |
System.out.println("SECOND: " + traversal.explain().prettyPrint(160)); | |
found = 0; | |
for (final String line : traversal.explain().prettyPrint(160).split("]\n")) { // need to split cause of word wrap | |
System.out.println(line + "\n\n"); | |
if (line.contains("IncidentToAdjacentStrategy") && line.contains("[VertexStep(IN,vertex)")) { | |
found++; | |
System.out.println("FOUND"); | |
} | |
if (line.contains("IncidentToAdjacentStrategy") && line.contains("[VertexStep(OUT,vertex)")){ | |
found++; | |
System.out.println("FOUND"); | |
} | |
if (line.contains("AdjacentToIncidentStrategy") && line.contains("[VertexStep(BOTH,edge)")){ | |
found++; | |
System.out.println("FOUND"); | |
} | |
if (line.contains("CountStrategy") && line.contains("RangeGlobalStep(0,3)")){ | |
found++; | |
System.out.println("FOUND"); | |
} | |
} | |
assertEquals(4, found); | |
} | |
OUTPUT: | |
FIRST: Traversal Explanation | |
============================================================================================================================================================================================================================= | |
Original Traversal [VertexStep(OUT,edge), EdgeVertexStep(IN), GroupStep([VertexStep(IN,edge), EdgeVertexStep(OUT), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
ConnectiveStrategy [D] [VertexStep(OUT,edge), EdgeVertexStep(IN), GroupStep([VertexStep(IN,edge), EdgeVertexStep(OUT), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
IncidentToAdjacentStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
RepeatUnrollStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
MatchPredicateStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
PathRetractionStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
ByModulatorOptimizationStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
CountStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
FilterRankingStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
InlineFilterStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
AdjacentToIncidentStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
LazyBarrierStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
ProfileStrategy [F] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
StandardVerificationStrategy [V] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
Final Traversal [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
Traversal Explanation | |
============================================================================================================================================================================================================================= | |
Original Traversal [VertexStep(OUT,edge), EdgeVertexStep(IN), GroupStep([VertexStep(IN,edge), EdgeVertexStep(OUT), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
ConnectiveStrategy [D] [VertexStep(OUT,edge), EdgeVertexStep(IN), GroupStep([VertexStep(IN,edge), EdgeVertexStep(OUT), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
IncidentToAdjacentStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
FOUND | |
FOUND | |
RepeatUnrollStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
MatchPredicateStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
PathRetractionStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
ByModulatorOptimizationStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
CountStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
FOUND | |
FilterRankingStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
InlineFilterStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
AdjacentToIncidentStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
FOUND | |
LazyBarrierStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
ProfileStrategy [F] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
StandardVerificationStrategy [V] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
Final Traversal [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
SECOND: Traversal Explanation | |
============================================================================================================================================================= | |
Original Traversal [VertexStep(OUT,edge), EdgeVertexStep(IN), GroupStep([VertexStep(IN,edge), EdgeVertexStep(OUT), GroupCountStep([VertexS | |
tep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
ConnectiveStrategy [D] [VertexStep(OUT,edge), EdgeVertexStep(IN), GroupStep([VertexStep(IN,edge), EdgeVertexStep(OUT), GroupCountStep([VertexS | |
tep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
IncidentToAdjacentStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, Is | |
Step(gt(2))])],[FoldStep])] | |
RepeatUnrollStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, Is | |
Step(gt(2))])],[FoldStep])] | |
MatchPredicateStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, Is | |
Step(gt(2))])],[FoldStep])] | |
PathRetractionStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, Is | |
Step(gt(2))])],[FoldStep])] | |
ByModulatorOptimizationStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, Is | |
Step(gt(2))])],[FoldStep])] | |
CountStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), RangeGlobalStep(0,3 | |
), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
FilterRankingStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), RangeGlobalStep(0,3 | |
), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
InlineFilterStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), RangeGlobalStep(0,3 | |
), CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
AdjacentToIncidentStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), | |
CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
LazyBarrierStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), | |
CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
ProfileStrategy [F] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), | |
CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
StandardVerificationStrategy [V] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), | |
CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
Final Traversal [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), | |
CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
Traversal Explanation | |
============================================================================================================================================================= | |
Original Traversal [VertexStep(OUT,edge), EdgeVertexStep(IN), GroupStep([VertexStep(IN,edge), EdgeVertexStep(OUT), GroupCountStep([VertexS | |
tep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
ConnectiveStrategy [D] [VertexStep(OUT,edge), EdgeVertexStep(IN), GroupStep([VertexStep(IN,edge), EdgeVertexStep(OUT), GroupCountStep([VertexS | |
tep(BOTH,vertex), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
IncidentToAdjacentStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, Is | |
Step(gt(2))])],[FoldStep]) | |
FOUND | |
FOUND | |
RepeatUnrollStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, Is | |
Step(gt(2))])],[FoldStep]) | |
MatchPredicateStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, Is | |
Step(gt(2))])],[FoldStep]) | |
PathRetractionStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, Is | |
Step(gt(2))])],[FoldStep]) | |
ByModulatorOptimizationStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), CountGlobalStep, Is | |
Step(gt(2))])],[FoldStep]) | |
CountStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), RangeGlobalStep(0,3 | |
), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
FilterRankingStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), RangeGlobalStep(0,3 | |
), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
InlineFilterStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,vertex), RangeGlobalStep(0,3 | |
), CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
AdjacentToIncidentStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), | |
CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
FOUND | |
LazyBarrierStrategy [O] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), | |
CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
ProfileStrategy [F] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), | |
CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
StandardVerificationStrategy [V] [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), | |
CountGlobalStep, IsStep(gt(2))])],[FoldStep]) | |
Final Traversal [VertexStep(OUT,vertex), GroupStep([VertexStep(IN,vertex), GroupCountStep([VertexStep(BOTH,edge), RangeGlobalStep(0,3), | |
CountGlobalStep, IsStep(gt(2))])],[FoldStep])] | |
[ERROR] Tests run: 3, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 3.883 s <<< FAILURE! - in org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanationTest | |
[ERROR] shouldApplyStrategiesCorrectly(org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanationTest) Time elapsed: 0.076 s <<< FAILURE! | |
java.lang.AssertionError: expected:<4> but was:<3> | |
at org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanationTest.shouldApplyStrategiesCorrectly(TraversalExplanationTest.java:154) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment