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 2016/10/25 19:07:59 UTC

[jira] [Commented] (TINKERPOP-1527) Do not override registered strategies in TraversalStrategies.GlobalCache

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

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

GitHub user okram opened a pull request:

    https://github.com/apache/tinkerpop/pull/464

    TINKERPOP-1527: Do not override registered strategies in TraversalStrategies.GlobalCache

    https://issues.apache.org/jira/browse/TINKERPOP-1527
    
    `GraphComputer` strategy registration in `TraversalStrategy.GlobalCache` has been a "uh..I think static{}-blocks load once and only once and when the class is used?" ... This assumption lead to a few errant problems that have been rectified and verified in this PR.
    
    1.) `TraversalStrategies.GlobalCache` strategies can be manipulated without fear of a new instance of the `Graph` or `GraphComputer` class over-writing user manipulations. That is, a test case now proves that `static{}` loads once and only once.
    
    2.) `TraversalStrategies.GlobalCache.getStrategies()` is responsible for ensuring that `static{}` has been called for the particular `Graph` or `GraphComputer` class. A test case now proves that `Class.forName()` is sufficient to accomplish this.

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

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

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

    https://github.com/apache/tinkerpop/pull/464.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 #464
    
----
commit f9bf0444e4bfe09dcea9b8dc05870ddaec4b6180
Author: Marko A. Rodriguez <ok...@gmail.com>
Date:   2016-10-25T19:02:29Z

    TraversalStrategy.GlobalCache.getStrategies() is now the point where static{} code blocks are loaded for Graph and GraphComputer classes. Added a test case to TraversalStrategiesTset that demonstrates that the GlobalCache can be manipulated without fear of static{} re-registering strategies. This is a much much safer model and, moreover, proved correct via testing.

commit b0bedf6b441edddbfd2e005641fee0a044b3b552
Author: Marko A. Rodriguez <ok...@gmail.com>
Date:   2016-10-25T19:07:01Z

    added authorship to TraversalStrategies java file.

----


> Do not override registered strategies in TraversalStrategies.GlobalCache
> ------------------------------------------------------------------------
>
>                 Key: TINKERPOP-1527
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1527
>             Project: TinkerPop
>          Issue Type: Improvement
>          Components: process
>    Affects Versions: 3.2.3
>            Reporter: Marko A. Rodriguez
>            Assignee: Marko A. Rodriguez
>
> This may be a non-issue (need to check), but we currently do this in every {{Graph}} (and {{GraphComputer}}) class.
> {code}
> static {
>         TraversalStrategies.GlobalCache.registerStrategies(TinkerGraph.class, TraversalStrategies.GlobalCache.getStrategies(Graph.class).clone().addStrategies(TinkerGraphStepStrategy.instance()));
>     }
> {code}
> If this static code is loaded every time a {{Graph}} instance is created, then manually tweaked strategy registrations get overwritten. If this is the case, then we should do:
> {code}
> static {
>     TraversalStrategies.GlobalCache.registerStrategiesIfNotPresent(TinkerGraph.class,TraversalStrategies.GlobalCache.getStrategies(Graph.class).clone().addStrategies(TinkerGraphStepStrategy.instance()));
>     }
> {code}
> That is, add a {{registerIfNotPresent()}} method.



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