Hi Pieter,

forEachRemaining iterates over the result and hence I would expect the
result to be 2. Otherwise you would / should end up with an endless loop.
However, the same behavior is seen when you replace forEachRemaining with a
sideEffect lambda step. Not sure what the expected behavior is / should be,
but I think I prefer the way it's done now.

Cheers,
Daniel


On Sat, Jan 21, 2017 at 7:30 PM, pieter-gmail <pieter.mar...@gmail.com>
wrote:

> Hi,
>
> I need to clarify the expected semantics of gremlin's lazy iteration
> semantics.
> The following gremlin is what highlighted it.
>
> ```
>     @Test
>     public void testLazy() {
>         final TinkerGraph graph = TinkerGraph.open();
>         final Vertex a1 = graph.addVertex(T.label, "A");
>         final Vertex b1 = graph.addVertex(T.label, "B");
>         final Vertex c1 = graph.addVertex(T.label, "C");
>         a1.addEdge("ab", b1);
>         a1.addEdge("ac", c1);
>
>         AtomicInteger count = new AtomicInteger(0);
>         graph.traversal().V(a1).bothE().forEachRemaining(edge -> {
>             a1.addEdge("ab", b1);
>             //a1.addEdge("ac", c1);
>             count.getAndIncrement();
>         });
>         Assert.assertEquals(2, count.get());
>     }
>
> ```
>
> On TinkerGraph the count is always 2.
>
> On Sqlg's Postgresql dialect the `bothE` first traverses the 'ac' edges
> adds in a 'ab' edge and then traverses the 'ab' edges and ends up with a
> count of 3.
>
> On Sqlg's HSQLDB and H2 dialects the `bothE` first traverses the 'ab'
> edges adds in a 'ab' edge then traverses the 'ac' edges and ends up with
> a count of 2.
>
> So for Sqlg the added edge will be seen by subsequent traversals due to
> the lazy nature but the order affects the result.
>
> TinkerGraph seems to get both 'ab' and 'ac' edges upfront and does not
> subsequently see the added edge. A bit like it has a hidden barrier step
> before the `forEachRemaining`.
>
> What is the expected semantics in this situation?
> Is a traversal that traverses an element that has been modified earlier
> in the same traversal suppose to see the change?
>
> Thanks
> Pieter
>
>

Reply via email to