[ 
https://issues.apache.org/jira/browse/TINKERPOP-2399?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17346438#comment-17346438
 ] 

Saikiran Boga commented on TINKERPOP-2399:
------------------------------------------

NoOpBarrierStep, blocking in nature seem to alter the semantics of the query 
and steps in a case like this. I think there are certain constraints on when 
such bulking can be performed. For example, having a step that writes something 
into side-effect and/or has a local scope of execution should be treated 
carefully when altering.

> LazyBarrierStrategy may affect the result of a query with a local aggregate 
> step 
> ---------------------------------------------------------------------------------
>
>                 Key: TINKERPOP-2399
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2399
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: process
>            Reporter: Norio Akagi
>            Priority: Minor
>
> Sorry if this was already discussed elsewhere.
> An example query:
> {noformat}
> g.V("1", "2", "3").aggregate(Scope.local, 
> "agg").both().where(P.without("agg")){noformat}
> Please imagine a graph as *v["1"] > v["2"] -> v["3"] -> v["4"]* 
>  The result is: v[2], v[3], and v[4]
>  This is because due to the nature of local scope, when both() of v["1"] (= 
> v["2"]) reaches to the where step, agg = v["1"] only. so v["2"] passes the 
> predicate. In the same way v["3"] and v["4"] are also passed.
> However, if you have multiple both steps like
>  
> {noformat}
> g.V("1", "2", "3").aggregate(Scope.local, 
> "agg").both().both().where(P.without("agg")){noformat}
>  
> You will see that when the first solution reaches to the where step, all 
> v["1"], v["2"] and v["3"] are already collected in agg as if the aggregate 
> step has the global scope, hence they are not seen in the result.
> Why ? Because here by having 2 both() steps LazyBarrierStrategy kicks in for 
> the first both() step and NoOpBarrierStep is inserted, then it eagerly 
> collects the solution from upstream. As a result, when the downstream is 
> processed, already all solutions are in the Aggregation sideEffect. It may 
> not be only Store step's issue but local(aggregate) is affected too.
> I am not sure if this is a bug, we might say "this is by design", but it is 
> felt a bit counter-intuitive from a user's perspective. Graph provider needs 
> to understand the logic around Barrier and LazyBarrierStrategy but the user 
> may not need to recognize such context especially when then Barrier step is 
> not explicitly specified by them.
> Please let me know how do you think. Thanks !



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to