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
> 

Reply via email to