Re: PathRetractionStrategy and TraverserRequirement.PATH
Hello Pieter, There was a bug in RepeatStep OLAP around emit().as(‘x’) that was fixed in 3.2.3. Perhaps it is related… Marko. http://markorodriguez.com > On Oct 26, 2016, at 3:44 AM, pieter-gmailwrote: > > 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 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 > >>> traversal = g.traversal() >>> .V().as("a") >>> .repeat(both()).times(3).emit().as("b") >>> . group().by(select("a")); >>> printTraversalForm(traversal); >>> while (traversal.hasNext()) { >>> Map vertexMap = traversal.next(); >>> for (Vertex vertex : vertexMap.keySet()) { >>> Collection 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 > >>> traversal = g.traversal() >>> .V().as("a") >>> .repeat(both()).times(3).emit().as("b") >>> . group().by(select("a")) >>> .by(select("b").dedup().order().by(T.id).fold()); >>> printTraversalForm(traversal); >>> while (traversal.hasNext()) { >>> Map vertexMap = traversal.next(); >>> for (Vertex vertex : vertexMap.keySet()) { >>> Collection 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 > wrote: > > Hi,
Re: PathRetractionStrategy and TraverserRequirement.PATH
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-gmailwrote: >> >> 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 > >> traversal = g.traversal() >>.V().as("a") >>.repeat(both()).times(3).emit().as("b") >>. group().by(select("a")); >>printTraversalForm(traversal); >>while (traversal.hasNext()) { >>Map vertexMap = traversal.next(); >>for (Vertex vertex : vertexMap.keySet()) { >>Collection 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 > >> traversal = g.traversal() >>.V().as("a") >>.repeat(both()).times(3).emit().as("b") >>. group().by(select("a")) >>.by(select("b").dedup().order().by(T.id).fold()); >>printTraversalForm(traversal); >>while (traversal.hasNext()) { >>Map vertexMap = traversal.next(); >>for (Vertex vertex : vertexMap.keySet()) { >>Collection 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 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,
Re: PathRetractionStrategy and TraverserRequirement.PATH
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-gmailwrote: > > 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 > > traversal = g.traversal() >.V().as("a") >.repeat(both()).times(3).emit().as("b") >. group().by(select("a")); >printTraversalForm(traversal); >while (traversal.hasNext()) { >Map vertexMap = traversal.next(); >for (Vertex vertex : vertexMap.keySet()) { >Collection 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 > > traversal = g.traversal() >.V().as("a") >.repeat(both()).times(3).emit().as("b") >. group().by(select("a")) >.by(select("b").dedup().order().by(T.id).fold()); >printTraversalForm(traversal); >while (traversal.hasNext()) { >Map vertexMap = traversal.next(); >for (Vertex vertex : vertexMap.keySet()) { >Collection 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 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 > >>> traversal = g.traversal() >>> .V().as("a") >>> .out().as("b") >>> . group().by(select("a")) >>> .by(select("b")); >>> printTraversalForm(traversal); >>> >>>
Re: PathRetractionStrategy and TraverserRequirement.PATH
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> traversal = g.traversal() .V().as("a") .repeat(both()).times(3).emit().as("b") . group().by(select("a")); printTraversalForm(traversal); while (traversal.hasNext()) { Map vertexMap = traversal.next(); for (Vertex vertex : vertexMap.keySet()) { Collection 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 > traversal = g.traversal() .V().as("a") .repeat(both()).times(3).emit().as("b") . group().by(select("a")) .by(select("b").dedup().order().by(T.id).fold()); printTraversalForm(traversal); while (traversal.hasNext()) { Map vertexMap = traversal.next(); for (Vertex vertex : vertexMap.keySet()) { Collection 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 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 > >> traversal = g.traversal() >>.V().as("a") >>.out().as("b") >>. 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`
Re: PathRetractionStrategy and TraverserRequirement.PATH
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-gmailwrote: > > 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 > > traversal = g.traversal() >.V().as("a") >.out().as("b") >. 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