Thanks, now I know Sqlg has indeed been bugged. I am loosing the label after the emit().as("b").
Cheers Pieter On 25/10/2016 21:29, Marko Rodriguez wrote: > Here is a simple test. Remove PathRetractionStrategy from TinkerGraph > traversal and see what you get? Do you get what Sqlg returns or the same as > if with PathRetractionStrategy. > > E.g. > > graph = TinkerFactory.createModern(); > g = graph.traversal().withoutStrategies(PathRetractionStrategy.class); > g.V().the().traversal().to().test() > > If you get the same answer without PathRetractionStrategy, then you know that > Sqlg is bugged. > > HTH, > Marko. > > http://markorodriguez.com > > > >> On Oct 24, 2016, at 2:21 PM, pieter-gmail <pieter.mar...@gmail.com> wrote: >> >> Ok apologies. I thought I spotted the difference and simplified the >> gremlin too much to highlight what I thought I saw. The above mentioned >> queries are returning the same result in Sqlg as TinkerGraph. >> >> Here is what is not working. >> >> final TinkerGraph g = TinkerFactory.createModern(); >> GraphTraversal<Vertex, Map<Vertex, Collection<Vertex>>> >> traversal = g.traversal() >> .V().as("a") >> .repeat(both()).times(3).emit().as("b") >> .<Vertex, Collection<Vertex>>group().by(select("a")); >> printTraversalForm(traversal); >> while (traversal.hasNext()) { >> Map<Vertex, Collection<Vertex>> vertexMap = traversal.next(); >> for (Vertex vertex : vertexMap.keySet()) { >> Collection<Vertex> coll = vertexMap.get(vertex); >> System.out.println("key: " + vertex.value("name") + ", >> value: " + coll.size()); >> } >> } >> >> For this Sqlg has the same result as TinkerGraph. >> >> TinkerGraph >> >> post-strategy:[TinkerGraphStep(vertex,[])@[a], >> RepeatStep([VertexStep(BOTH,vertex), >> RepeatEndStep],until(loops(3)),emit(true))@[b], >> GroupStep([SelectOneStep(a), NoOpBarrierStep(2500)],[FoldStep])] >> >> Sqlg >> >> post-strategy:[SqlgGraphStepCompiled(vertex,[])@[sqlgPathFakeLabel], >> GroupStep([SelectOneStep(a)],[FoldStep])] >> >> key: marko, value: 27 >> key: vadas, value: 11 >> key: lop, value: 27 >> key: josh, value: 27 >> key: ripple, value: 11 >> key: peter, value: 11 >> >> Adding in the extra by() >> >> final TinkerGraph g = TinkerFactory.createModern(); >> GraphTraversal<Vertex, Map<Vertex, Collection<Vertex>>> >> traversal = g.traversal() >> .V().as("a") >> .repeat(both()).times(3).emit().as("b") >> .<Vertex, Collection<Vertex>>group().by(select("a")) >> .by(select("b").dedup().order().by(T.id).fold()); >> printTraversalForm(traversal); >> while (traversal.hasNext()) { >> Map<Vertex, Collection<Vertex>> vertexMap = traversal.next(); >> for (Vertex vertex : vertexMap.keySet()) { >> Collection<Vertex> coll = vertexMap.get(vertex); >> System.out.println("key: " + vertex.value("name") + ", >> value: " + coll.size()); >> } >> } >> >> TinkerGraph prints >> >> post-strategy:[TinkerGraphStep(vertex,[])@[a], >> RepeatStep([VertexStep(BOTH,vertex), >> RepeatEndStep],until(loops(3)),emit(true))@[b], >> GroupStep([SelectOneStep(a), NoOpBarrierStep(2500)],[SelectOneStep(b), >> DedupGlobalStep, OrderGlobalStep([[id, incr]]), FoldStep])] >> >> key: marko, value: 6 >> key: vadas, value: 6 >> key: lop, value: 6 >> key: josh, value: 6 >> key: ripple, value: 6 >> key: peter, value: 6 >> >> and Sqlg >> >> post-strategy:[SqlgGraphStepCompiled(vertex,[])@[sqlgPathFakeLabel], >> GroupStep([SelectOneStep(a)],[SelectOneStep(b), DedupGlobalStep, >> OrderGlobalStep([[id, incr]]), FoldStep])] >> >> key: marko, value: 0 >> key: ripple, value: 0 >> key: peter, value: 0 >> key: lop, value: 0 >> key: josh, value: 0 >> key: vadas, value: 0 >> >> The difference being the NoOpBarrierStep but I am not sure if that is >> the culprit or not. >> >> Thanks >> Pieter >> >> >> >> >> >> >> On 24/10/2016 21:31, Marko Rodriguez wrote: >>> Hi Pieter, >>> >>> What are the two answers --- TinkerGraph and Sqlg for the respective test >>> traversal? >>> >>> (I suspect the test is bad because group() pushes traversers through with >>> bulks and all so the test might just add to a collection without adding >>> respecting bulks. Probably should change that test regardless to do like a >>> count or something instead). >>> >>> Marko. >>> >>> http://markorodriguez.com >>> >>> >>> >>>> On Oct 24, 2016, at 12:57 PM, pieter-gmail <pieter.mar...@gmail.com> wrote: >>>> >>>> Hi, >>>> >>>> This is on 3.2.3 >>>> >>>> I have been investigating why >>>> `DedupTest.g_V_asXaX_repeatXbothX_timesX3X_emit_asXbX_group_byXselectXaXX_byXselectXbX_dedup_order_byXidX_foldX_selectXvaluesX_unfold_dedup` >>>> fails on Sqlg. It is a fairly recently added test. >>>> >>>> My investigation so far has narrowed the problem to the >>>> `PathRetractionStrategy` >>>> >>>> On the modern graph, >>>> >>>> GraphTraversal<Vertex, Map<Vertex, Collection<Vertex>>> >>>> traversal = g.traversal() >>>> .V().as("a") >>>> .out().as("b") >>>> .<Vertex, Collection<Vertex>>group().by(select("a")) >>>> .by(select("b")); >>>> printTraversalForm(traversal); >>>> >>>> Outputs the following on TinkerGraph >>>> >>>> pre-strategy:[GraphStep(vertex,[])@[a], VertexStep(OUT,vertex)@[b], >>>> GroupStep([SelectOneStep(a)],[SelectOneStep(b)])] >>>> post-strategy:[TinkerGraphStep(vertex,[])@[a], >>>> VertexStep(OUT,vertex)@[b], GroupStep([SelectOneStep(a), >>>> NoOpBarrierStep(2500)],[SelectOneStep(b), NoOpBarrierStep(2500)])] >>>> >>>> And on Sqlg >>>> pre-strategy:[GraphStep(vertex,[])@[a], VertexStep(OUT,vertex)@[b], >>>> GroupStep([SelectOneStep(a)],[SelectOneStep(b)])] >>>> post-strategy:[SqlgGraphStepCompiled(vertex,[])@[b], >>>> GroupStep([SelectOneStep(a)],[SelectOneStep(b)])] >>>> >>>> The difference being that Sqlg does not have the `NoOpBarrierStep` >>>> inserted. >>>> >>>> For TinkerGraph the `NoOpBarrierStep` is being inserted in the >>>> `PathRetractionStrategy` on line 113 >>>> However this does not happen for Sqlg as Sqlg's GraphStep has >>>> `TraverRequirement.PATH` as a requirement which prevents >>>> `PathRetractionStrategy` from doing what it does. >>>> >>>> Is this a bug of sorts? Should Sqlg be adding in the `NoOpBarrierStep`? >>>> >>>> Thanks >>>> Pieter >