You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2015/12/01 21:22:10 UTC

[jira] [Commented] (TINKERPOP3-1013) Traverser tags as a safer way of using path labels

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

ASF GitHub Bot commented on TINKERPOP3-1013:
--------------------------------------------

GitHub user okram opened a pull request:

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

    TINKERPOP3-1013: Traverser tags as a safer way of using path labels

    https://issues.apache.org/jira/browse/TINKERPOP3-1013
    
    We have had a hack in `MatchStep` this whole time where we use path labels to store branch history. This is not only semantically awkward (as labels are added that were not provided via `as()`), it also means we will not be able to do https://issues.apache.org/jira/browse/TINKERPOP3-736. Also, this will allow us to cleanly implement `IntersectStep` and `SymetricDifferenceStep` (down the road).
    
    The implementation is really simple. `Traverser.getTags()`. This method returns a mutable set and thus, we can remove, add, size, contains, etc. tags associated with a traverser.
    
    Ran `mvn clean install` and all is golden.
    
    VOTE +1.

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

    $ git pull https://github.com/apache/incubator-tinkerpop TINKERPOP3-1013

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

    https://github.com/apache/incubator-tinkerpop/pull/165.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 #165
    
----
commit e6a1141a0515f8adc7e51adb2a84495349b06c6a
Author: Marko A. Rodriguez <ok...@gmail.com>
Date:   2015-12-01T20:16:26Z

    Added Traverser.getTags(). This gives us more flexbility in how we handle branch-history. This improves MatchStep, future IntersectStep, future SymmetricDifferenceStep, and will allow us to do traversal rewriting in MatchStep (TINKERPOP3-736). No more awkward hack of traverser.path().extend(step.getId())... the stepID is NOT a path label, its a tag.

----


> Traverser tags as a safer way of using path labels
> --------------------------------------------------
>
>                 Key: TINKERPOP3-1013
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP3-1013
>             Project: TinkerPop 3
>          Issue Type: Improvement
>          Components: process
>    Affects Versions: 3.1.0-incubating
>            Reporter: Marko A. Rodriguez
>            Assignee: Marko A. Rodriguez
>             Fix For: 3.1.1-incubating
>
>
> We should add the following methods to {{Traverser}}.
> {code}
> void Traverser.addTag(final String tag)
> boolean Traverser.hasTag(final String tag)
> void Traverser.dropTag(final String tag)
> void Traverser.dropTags()
> {code}
> What is the point of a "tag" ? There are two use cases:
> 1. Currently {{MatchStep}} "tags" a traverser with {{traverser.getPath().addLabel(step.getId())}}.  This means that the path data of the traverser is used to store which branches of the {{match()}} the traverser has already gone down. This is a hack as now the {{travesrer.path()}} has a weird step ID label. Also, its inefficient as the path needs to be searched for the respective "tag." A {{Set<String>}} is much more efficient.
> 2. Intersect/symmetric difference will require some sort of "tagging" as explained in Section 4 of http://arxiv.org/abs/1511.06278. We could, of course, use the {{MatchStep}} way of doing things, but again, thats a hack.
> 3. When we support TINKERPOP3-736, using the "{{path()}}-hack" will not work as two branches will have different stepIds but the same tag.
> In short, anytime we need to know if a particular branch of a traversal was taken, {{Traverser.getTag()}} is our friend. 
> IMPORTANT: This will go into {{Traverser.Admin}} as no user should use these tags. These are simply for internal markup of traverser.



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