Re: PathRetractionStrategy and TraverserRequirement.PATH

2016-10-26 Thread Marko Rodriguez
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-gmail  wrote:
> 
> 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

2016-10-26 Thread pieter-gmail
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,

 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

2016-10-25 Thread Marko Rodriguez
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,
>>> 
>>> 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

2016-10-24 Thread pieter-gmail
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

2016-10-24 Thread Marko Rodriguez
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` 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