Skip to content

Instantly share code, notes, and snippets.

@robertdale
Created March 22, 2018 14:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robertdale/8b5fa41432d29b3e99bf5ff2515dff3d to your computer and use it in GitHub Desktop.
Save robertdale/8b5fa41432d29b3e99bf5ff2515dff3d to your computer and use it in GitHub Desktop.
TINKERPOP-1682 by-modulator optimization strategy
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