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)