stephen mallette created TINKERPOP-1994:
-------------------------------------------

             Summary: LazyBarrierStrategy fully responsible for barrier() 
additions
                 Key: TINKERPOP-1994
                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1994
             Project: TinkerPop
          Issue Type: Improvement
          Components: process
    Affects Versions: 3.2.9
            Reporter: stephen mallette


As it stands, {{LazyBarrierStrategy}}, {{RepeatUnrollStrategy}} and 
{{PathRetractionStrategy}} (others??) add {{barrier()}} steps as needed - for 
example:

{code}
gremlin> g.V().repeat(out().barrier()).times(2).explain()
==>Traversal Explanation
===============================================================================================================================================================================================
Original Traversal                 [GraphStep(vertex,[]), 
RepeatStep([VertexStep(OUT,vertex), NoOpBarrierStep, 
RepeatEndStep],until(loops(2)),emit(false))]

ConnectiveStrategy           [D]   [GraphStep(vertex,[]), 
RepeatStep([VertexStep(OUT,vertex), NoOpBarrierStep, 
RepeatEndStep],until(loops(2)),emit(false))]
MatchPredicateStrategy       [O]   [GraphStep(vertex,[]), 
RepeatStep([VertexStep(OUT,vertex), NoOpBarrierStep, 
RepeatEndStep],until(loops(2)),emit(false))]
FilterRankingStrategy        [O]   [GraphStep(vertex,[]), 
RepeatStep([VertexStep(OUT,vertex), NoOpBarrierStep, 
RepeatEndStep],until(loops(2)),emit(false))]
InlineFilterStrategy         [O]   [GraphStep(vertex,[]), 
RepeatStep([VertexStep(OUT,vertex), NoOpBarrierStep, 
RepeatEndStep],until(loops(2)),emit(false))]
IncidentToAdjacentStrategy   [O]   [GraphStep(vertex,[]), 
RepeatStep([VertexStep(OUT,vertex), NoOpBarrierStep, 
RepeatEndStep],until(loops(2)),emit(false))]
RepeatUnrollStrategy         [O]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500)]
PathRetractionStrategy       [O]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500)]
AdjacentToIncidentStrategy   [O]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500)]
CountStrategy                [O]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500)]
LazyBarrierStrategy          [O]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500)]
TinkerGraphCountStrategy     [P]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500)]
TinkerGraphStepStrategy      [P]   [TinkerGraphStep(vertex,[]), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500)]
ProfileStrategy              [F]   [TinkerGraphStep(vertex,[]), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500)]
StandardVerificationStrategy [V]   [TinkerGraphStep(vertex,[]), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500)]

Final Traversal                    [TinkerGraphStep(vertex,[]), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500), 
VertexStep(OUT,vertex), NoOpBarrierStep, NoOpBarrierStep(2500)]
{code}

We should centralize the logic for this in {{LazyBarrierStrategy}} and remove 
it from other strategies. By keeping the logic in a single place we can (1) 
ensure the best implementation - note in the above example, we're getting extra 
{{barrier()}} steps (2) users can be assured that removing the single 
{{LazyBarrierStrategy}} will remove all automated {{barrier()}} applications.

This isn't a breaking change, but it could change traversal behavior I suppose 
- perhaps this goes just to 3.4.0.......



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to