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 <[email protected]> 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