[ 
https://issues.apache.org/jira/browse/TINKERPOP-2968?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Saikiran Boga updated TINKERPOP-2968:
-------------------------------------
    Component/s: process

> Fix DropStep semantics for deleted element referenced by upstream steps
> -----------------------------------------------------------------------
>
>                 Key: TINKERPOP-2968
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2968
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: process
>            Reporter: Saikiran Boga
>            Priority: Major
>
> This is from a recent user question on StackOverflow here 
> [https://stackoverflow.com/questions/76662422/how-does-it-come-that-my-gremlin-query-delivers-two-different-results]
>  for difference in behavior when using drop step.
>  
> With this preloaded data:
> {code:java}
> g.addV("TopVertex").property('id', 
> 4713).property('testProperty1','testProperty1').as('vertex1')
> .addV("SubVertex").property('name','C1').as('C1')
> .addV("SubVertex").property('name','C2').as('C2')
> .addV("SubVertex").property('name','C3').as('C3')
> .addE("splitsInto").from('vertex1').to('C1').property('ordinal',1)
> .addE("splitsInto").from('vertex1').to('C2').property('ordinal',2)
> .addE("splitsInto").from('vertex1').to('C3').property('ordinal',3)
> .addV("TopVertex").property('id', 
> 4713).property('testProperty2','testProperty2').as('vertex2')
> .addV("SubVertex").property('name','C4').as('C4')
> .addV("SubVertex").property('name','C5').as('C5')
> .addV("SubVertex").property('name','C6').as('C6')
> .addE("splitsInto").from('vertex2').to('C4').property('ordinal',4)
> .addE("splitsInto").from('vertex2').to('C5').property('ordinal',5)
> .addE("splitsInto").from('vertex2').to('C6').property('ordinal',6) {code}
> And when we run the below query:
> {code:java}
> g.withoutStrategies(LazyBarrierStrategy.class).
> addV("MergedVertex").property('id', 4713).as('mergedVertex').
> V().hasLabel("TopVertex").has('id', 4713).as('oldVertices').
>        outE().as('oldEdges').
>        inV().as('inVertices').
>        select('mergedVertex').
>        addE('splitsInto').to('inVertices').as('newEdges').
>        sideEffect(select('oldEdges').properties().
>                   unfold().as('props').
>                   select('newEdges').
>                   property(select('props').key(), select('props').value())).
>        select('oldVertices').drop() {code}
> When LazyBarrierStrategy is disabled, drop() step at the end here drops 
> `oldVertices` one at a time, i.e., no batching before drop() step.
>  
> This results in one of the `oldVertices` deleted when it is first 
> encountered, along with its edges. But the same vertex or related edges are 
> used by subsequent solutions in the same query it no longer exists and the 
> query does not work as intended.
>  
> With LazyBarrierStrategy enabled, the query adds 6 edges, each with a 
> property `ordinal`. But without the strategy, it adds only 2 edges. There is 
> a difference in query behavior and is confusing to users.
>  
> TinkerPop should define semantics for this case how drop will behave in this 
> case and what guarantees a provider should provide to the users. For 
> instance, as mentioned in the SO post in Neptune without using an explicit 
> barrier the query does not work similar to TinkerPop.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to