[
https://issues.apache.org/jira/browse/TINKERPOP-2933?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17717108#comment-17717108
]
Stephen Mallette commented on TINKERPOP-2933:
---------------------------------------------
{{LazyBarrierStrategy}} is usually responsible for injecting the {{barrier()}}:
{code}
gremlin> g.V().out('el0','el1').not(__.has('vp1', lt(0.30755568))).explain()
==>Traversal Explanation
======================================================================================================================================================================
Original Traversal [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
ConnectiveStrategy [D] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
IdentityRemovalStrategy [O] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
MatchPredicateStrategy [O] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
FilterRankingStrategy [O] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
InlineFilterStrategy [O] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
RepeatUnrollStrategy [O] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
PathRetractionStrategy [O] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
ByModulatorOptimizationStrategy [O] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
EarlyLimitStrategy [O] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
CountStrategy [O] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NotStep([HasStep([vp1.lt(0.30755568)])])]
LazyBarrierStrategy [O] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NoOpBarrierStep(2500),
NotStep([HasStep([vp1.lt(0.30755568)])])]
TinkerGraphCountStrategy [P] [GraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NoOpBarrierStep(2500),
NotStep([HasStep([vp1.lt(0.30755568)])])]
TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NoOpBarrierStep(2500),
NotStep([HasStep([vp1.lt(0.30755568)])])]
ProfileStrategy [F] [TinkerGraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NoOpBarrierStep(2500),
NotStep([HasStep([vp1.lt(0.30755568)])])]
StandardVerificationStrategy [V] [TinkerGraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NoOpBarrierStep(2500),
NotStep([HasStep([vp1.lt(0.30755568)])])]
Final Traversal [TinkerGraphStep(vertex,[]),
VertexStep(OUT,[el0, el1],vertex), NoOpBarrierStep(2500),
NotStep([HasStep([vp1.lt(0.30755568)])])]
{code}
> LazyBarrierStrategy affects the output order of query result
> ------------------------------------------------------------
>
> Key: TINKERPOP-2933
> URL: https://issues.apache.org/jira/browse/TINKERPOP-2933
> Project: TinkerPop
> Issue Type: Bug
> Reporter: Lei Tang
> Priority: Major
>
> I find that when I remove `LazyBarrierStrategy`, sometimes the output order
> of query result can be changed. I don't know whether it is a correct
> behavior, but it sometimes can affect the query result, e.g., a `range()` or
> `limit()` in a query.
> For example, I can get the consistent result with the following queries.
> {code:java}
> gremlin> :>
> g.withoutStrategies(LazyBarrierStrategy).V().out('el0','el1').has('vp1',
> lt(0.30755568))
> ==>v[98]
> ==>v[14]
> ==>v[94]
> gremlin> :> g.V().out('el0','el1').has('vp1', lt(0.30755568))
> ==>v[98]
> ==>v[14]
> ==>v[94]
> {code}
> However, I retrieved a different order of results with the following two
> queries. I think they should also execute the same query results, as well as
> the same order.
> {code:java}
> gremlin> :> g.V().out('el0','el1').not(__.has('vp1', lt(0.30755568)))
> ==>v[78]
> ==>v[35]
> ==>v[103]
> ==>v[103]
> ==>v[80]
> ==>v[80]
> ==>v[50]
> gremlin> :>
> g.withoutStrategies(LazyBarrierStrategy).V().out('el0','el1').not(__.has('vp1',
> lt(0.30755568)))
> ==>v[78]
> ==>v[35]
> ==>v[103]
> ==>v[80]
> ==>v[103]
> ==>v[80]
> ==>v[50]
> {code}
> Thus, if I have some other operations after it, I will get different query
> results.
> {code:java}
> gremlin> :>
> g.withoutStrategies(LazyBarrierStrategy).V().out('el0','el1').not(__.has('vp1',
> lt(0.30755568))).tail(3)
> ==>v[103]
> ==>v[80]
> ==>v[50]
> gremlin> :> g.V().out('el0','el1').not(__.has('vp1', lt(0.30755568))).tail(3)
> ==>v[80]
> ==>v[80]
> ==>v[50]
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)