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

ASF GitHub Bot commented on TINKERPOP-1188:
-------------------------------------------

GitHub user okram opened a pull request:

    https://github.com/apache/incubator-tinkerpop/pull/247

    TINKERPOP-1188: Semantics of BarrierSteps in TraversalParent global 
traversals is wrong.

    https://issues.apache.org/jira/browse/TINKERPOP-1188
    
    {{BranchSteps}} have a bug in them. Gremlin OLAP was correctly implementing 
the semantics, but Gremlin OLTP was not. Branch step options are global 
traversals and were acting like local traversals in OLTP. The fix to this bug 
is "breaking" in that users would relied on this behavior will have to change 
their traversals. However, its only for those traversals that have barriers in 
their branches. For instance:
    
    {code}
    g.V.union(out,in) // okay
    g.V.union(out.count(), in.count()) // breaking
    {code}
    
    If the user wants the same results for the second traversal above, they 
need to do:
    
    {code}
    g.V.local(union(out.count(), in.count()))
    {code}
    
    **CHANGELOG**
    
    ```
    * Fixed a semantic bug in `BranchStep` where barriers reacted locally. 
(*breaking*)
    ```
    
    **UPDATE DOCS**
    
    ```
    BranchStep Bug Fix
    ^^^^^^^^^^^^^^^^^^^
    
    For traversals that have barriers (e.g. `count()`, `max()`, `groupCount()`, 
etc.) in a `branch()-step` (e.g. `union()` or `choose()`) , the traversal needs 
to be updated. For instance, if a traversal is of the form 
`g.V().union(out().count(),both().count())`, the behavior is now different. 
There was a bug that has been fixed, but it changes the traversal result if the 
user was relying on the buggy behavior. In order to effect the same behavior, 
the traversal should be rewritten as 
`g.V().local(union(out().count(),both().count()))`. Note that if a branch does 
not have a barrier, then no changes are required. For instance, 
`g.V().union(out(),both())` does not need to be updated.
    ```
    
    `mvn clean install` passed. VOTE +1.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/apache/incubator-tinkerpop TINKERPOP-1188

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/incubator-tinkerpop/pull/247.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #247
    
----
commit 14b54efb32000467b6949c12dd9422068297ac21
Author: Marko A. Rodriguez <okramma...@gmail.com>
Date:   2016-03-01T19:59:01Z

    Fixed a bug in BranchStep (and its inheriting children -- union(), 
choose(), etc.). Branch options are global traversals and should never reset() 
on each insert. Moreover, they should fully pull from the source and not -- 
like a local traversal -- process one traverser at a time. If users were doing 
union(sum,count), to get the same result they will need to do 
local(union(sum,count)). Thus, its a breaking change -- but was a bug. This 
also allowed us to remove one more ComputerVerificationStrategy filter. At this 
point, OLAP is just like OLTP except for 'local star graph' stuff. Added a new 
test case to UnionTest that demonstrates the local(union()) vs union() behavior.

commit 4b162f06475822a1d45390b566bb7e18ed76d90a
Author: Marko A. Rodriguez <okramma...@gmail.com>
Date:   2016-03-01T20:01:42Z

    removed a restraint from ComputerVerificationStrategy. Forgot to update 
test.

----


> Semantics of BarrierSteps in TraversalParent global traversals is wrong.
> ------------------------------------------------------------------------
>
>                 Key: TINKERPOP-1188
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1188
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: process
>    Affects Versions: 3.1.1-incubating
>            Reporter: Marko A. Rodriguez
>
> Suppose the following traversal:
> {code}
> g.V.union(outE().count(), inE().count())
> {code}
> Given that {{count()}} is a {{ReducingBarrierStep}} and thus, continues to 
> pull until there are no more results, you would expect the result set to be:
> {code}
> [6,6]
> {code}
> However, its actually this:
> {code}
> [3,0]
> [0,1]
> [0,3]
> [2,1]
> [0,1]
> [1,0]
> {code}
> That is, for each traverser into {{union()}}, the {{count()}} is calculated.
> In OLAP, the result is {{[6,6]}} as expected.
> What should we do?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to