gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> s = SubgraphStrategy.build().vertexCriterion(hasId(1)).create()
==>SubgraphStrategy
gremlin> g.V().filter(hasId(1))
==>v[1]
gremlin> g.withStrategies(s).V()
==>v[1]
$ sh apache-gremlin-console-3.1.1-incubating/bin/gremlin.sh
\,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> s = SubgraphStrategy.build().vertexCriterion(__.in('knows').hasId(1)).create()
==>SubgraphStrategy
gremlin> g1 = GraphTraversalSource.build().with(s).create(graph)
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().filter(__.in('knows').hasId(1)).explain()
==>Traversal Explanation
===========================================================================================================================================
Original Traversal [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
ConnectiveStrategy [D] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
IdentityRemovalStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
IncidentToAdjacentStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
AdjacentToIncidentStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
FilterRankingStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
MatchPredicateStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
RangeByIsCountStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
TinkerGraphStepStrategy [P] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
EngineDependentStrategy [F] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
ProfileStrategy [F] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
StandardVerificationStrategy [V] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
ComputerVerificationStrategy [V] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
Final Traversal [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
gremlin> g.V().filter(__.in('knows').hasId(1))
==>v[2]
==>v[4]
gremlin> g1.V().explain()
==>Traversal Explanation
===========================================================================================================================================
Original Traversal [GraphStep([],vertex)]
ConnectiveStrategy [D] [GraphStep([],vertex)]
SubgraphStrategy [D] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
IdentityRemovalStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
IncidentToAdjacentStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
AdjacentToIncidentStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
FilterRankingStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
MatchPredicateStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
RangeByIsCountStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
TinkerGraphStepStrategy [P] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
EngineDependentStrategy [F] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
ProfileStrategy [F] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
StandardVerificationStrategy [V] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
ComputerVerificationStrategy [V] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
Final Traversal [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
gremlin> g1.V()
java.lang.StackOverflowError
Display stack trace? [yN] y
java.lang.StackOverflowError
at org.apache.tinkerpop.gremlin.process.traversal.step.filter.TraversalFilterStep.clone(TraversalFilterStep.java:57)
at org.apache.tinkerpop.gremlin.process.traversal.step.filter.TraversalFilterStep.clone(TraversalFilterStep.java:35)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.clone(DefaultTraversal.java:213)
at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.clone(DefaultGraphTraversal.java:50)
at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.clone(DefaultGraphTraversal.java:28)
at org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConnectiveStep.clone(ConnectiveStep.java:67)
at org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConnectiveStep.clone(ConnectiveStep.java:36)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.clone(DefaultTraversal.java:213)
at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.clone(DefaultGraphTraversal.java:50)
at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.clone(DefaultGraphTraversal.java:28)
at org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy.lambda$apply$264(SubgraphStrategy.java:115)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy.apply(SubgraphStrategy.java:102)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies.applyStrategies(DefaultTraversalStrategies.java:77)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:83)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:97)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:97)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:97)
[... about 1000 more repetitions of the applyStrategies(DefaultTraversal.java:97) line deleted ...]
gremlin>
In 3.1.3 and 3.2.1 the .filter(...) version works as expected but the subgraph strategy version dies with the StackOverflowError expressing itself earlier in the explain():
$ sh apache-gremlin-console-3.1.3/bin/gremlin.sh
\,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> s = SubgraphStrategy.build().vertexCriterion(__.in('knows').hasId(1)).create()
==>SubgraphStrategy
gremlin> g1 = GraphTraversalSource.build().with(s).create(graph)
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().filter(__.in('knows').hasId(1)).explain()
==>Traversal Explanation
===========================================================================================================================================
Original Traversal [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
ConnectiveStrategy [D] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
IdentityRemovalStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
FilterRankingStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
IncidentToAdjacentStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
AdjacentToIncidentStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
MatchPredicateStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
RangeByIsCountStrategy [O] [GraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
TinkerGraphStepStrategy [P] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
EngineDependentStrategy [F] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
ProfileStrategy [F] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
ComputerVerificationStrategy [V] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
StandardVerificationStrategy [V] [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
Final Traversal [TinkerGraphStep([],vertex), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
gremlin> g.V().filter(__.in('knows').hasId(1))
==>v[2]
==>v[4]
gremlin> g1.V().explain()
java.lang.StackOverflowError
Display stack trace? [yN] y
java.lang.StackOverflowError
at org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.clone(AbstractStep.java:179)
at org.apache.tinkerpop.gremlin.process.traversal.step.filter.TraversalFilterStep.clone(TraversalFilterStep.java:56)
at org.apache.tinkerpop.gremlin.process.traversal.step.filter.TraversalFilterStep.clone(TraversalFilterStep.java:35)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.clone(DefaultTraversal.java:213)
at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.clone(DefaultGraphTraversal.java:50)
at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.clone(DefaultGraphTraversal.java:28)
at org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConnectiveStep.clone(ConnectiveStep.java:67)
at org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConnectiveStep.clone(ConnectiveStep.java:36)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.clone(DefaultTraversal.java:213)
at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.clone(DefaultGraphTraversal.java:50)
at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.clone(DefaultGraphTraversal.java:28)
at org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy.lambda$apply$0(SubgraphStrategy.java:116)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy.apply(SubgraphStrategy.java:103)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies.applyStrategies(DefaultTraversalStrategies.java:77)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:83)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:97)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:97)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:97)
[... and so on ...]
And in 3.2.1:
$ sh apache-gremlin-console-3.2.1/bin/gremlin.sh
\,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> s = SubgraphStrategy.build().vertexCriterion(__.in('knows').hasId(1)).create()
==>SubgraphStrategy
gremlin> g.V().filter(__.in('knows').hasId(1)).explain()
==>Traversal Explanation
===========================================================================================================================================
Original Traversal [GraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
ConnectiveStrategy [D] [GraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
RepeatUnrollStrategy [O] [GraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
IdentityRemovalStrategy [O] [GraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
MatchPredicateStrategy [O] [GraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
PathRetractionStrategy [O] [GraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
FilterRankingStrategy [O] [GraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
RangeByIsCountStrategy [O] [GraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
ProfileStrategy [F] [TinkerGraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
StandardVerificationStrategy [V] [TinkerGraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
Final Traversal [TinkerGraphStep(vertex,[]), TraversalFilterStep([VertexStep(IN,[knows],vertex), HasStep([~id.eq(1)])])]
gremlin> g.V().filter(__.in('knows').hasId(1))
==>v[2]
==>v[4]
gremlin> g.withStrategies(s).V().explain()
java.lang.StackOverflowError
Display stack trace? [yN] y
java.lang.StackOverflowError
at java.util.AbstractCollection.addAll(AbstractCollection.java:343)
at java.util.LinkedHashSet.<init>(LinkedHashSet.java:169)
at org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.clone(AbstractStep.java:182)
at org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.clone(AbstractStep.java:38)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.clone(DefaultTraversal.java:212)
at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.clone(DefaultGraphTraversal.java:50)
at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.clone(DefaultGraphTraversal.java:28)
at org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConnectiveStep.clone(ConnectiveStep.java:67)
at org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConnectiveStep.clone(ConnectiveStep.java:36)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.clone(DefaultTraversal.java:212)
at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.clone(DefaultGraphTraversal.java:50)
at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.clone(DefaultGraphTraversal.java:28)
at org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy.lambda$apply$0(SubgraphStrategy.java:116)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy.apply(SubgraphStrategy.java:103)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies.applyStrategies(DefaultTraversalStrategies.java:79)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:92)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:106)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:106)
at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:106)
[... and so on ...]
I’m not trying to misuse SubgraphStrategy by having a multi-step traversal as the predicate am I?
--
You received this message because you are subscribed to the Google Groups "Gremlin-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to gremlin-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/gremlin-users/6466184c-bf52-41dd-9ff5-c317ca9f47ef%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.