JanusGraph / JanusGraph/janusgraph
Inconsistent results when executing equivalent queries
- Dominant language
- Java
- Stars
- 5.8k
- Forks
- 1.2k
- Avg merge
- 13h 53m
- Merged PRs (30d)
- 6
Description
Version: 0.6.2
Query 1:
```
g.V().as('s1').hasLabel('A').emit(__.loops().is(gte(1))).repeat(__.bothE().dedup().by(__.path()).otherV()).times(2).simplePath().from('s1').as('s2').hasLabel('B').emit(__.loops().is(gte(1))).repeat(__.inE().outV()).times(2).hasLabel('B').bothE().dedup().by(__.path()).otherV().hasLabel('A').select('s1').count()
// Result: 14960
```
Query 2:
```
g.V().as('s1').hasLabel('A').emit(__.loops().is(gte(1))).repeat(__.bothE().dedup().by(__.path()).otherV()).times(2).simplePath().from('s1').hasLabel('B').emit(__.loops().is(gte(1))).repeat(__.inE().outV()).times(2).hasLabel('B').bothE().dedup().by(__.path()).otherV().hasLabel('A').select('s1').count()
// Result: 14498
```
**The only difference is `as('s2')`, which is not expected to change the result**
To reproduce:
```
g.addV('A').as('n1').property(single, 'name', 56).property(single, 'id', 2).property(single, 'undefined', 18).addV('A').as('n2').property(single, 'name', 61).property(single, 'id', 61).addV('A').as('n3').property(single, 'name', 49).property(single, 'id', 92).property(single, 'undefined', 16).addV('B').as('n4').property(single, 'name', 79).property(single, 'id', 47).addV('B').as('n5').property(single, 'name', 22).property(single, 'id', 17).property(single, 'undefined', 74).addV('A').as('n6').property(single, 'name', 99).property(single, 'id', 95).addV('B').as('n7').property(single, 'name', 29).property(single, 'id', 25).property(single, 'undefined', 1).addV('A').as('n8').property(single, 'name', 65).property(single, 'id', 62).addV('B').as('n9').property(single, 'name', 34).property(single, 'id', 83).property(single, 'undefined', 24).addV('B').as('n10').property(single, 'name', 91).property(single, 'id', 74).addE('x').from('n1').to('n8').addE('y').from('n2').to('n9').addE('x').from('n3').to('n3').addE('y').from('n4').to('n1').addE('x').from('n5').to('n5').addE('y').from('n6').to('n5').addE('x').from('n7').to('n6').addE('y').from('n8').to('n7').addE('x').from('n9').to('n5').addE('y').from('n10').to('n5').addE('x').from('n1').to('n5').addE('y').from('n2').to('n8').addE('x').from('n3').to('n2').addE('y').from('n4').to('n3').addE('x').from('n5').to('n6').addE('y').from('n6').to('n10').addE('x').from('n7').to('n7').addE('y').from('n8').to('n8').addE('x').from('n9').to('n9').addE('y').from('n10').to('n9').addE('x').from('n1').to('n8').addE('y').from('n2').to('n3').addE('x').from('n3').to('n1').addE('y').from('n4').to('n6').addE('x').from('n5').to('n9').addE('y').from('n6').to('n6').addE('x').from('n7').to('n5').addE('y').from('n8').to('n5').addE('x').from('n9').to('n10').addE('y').from('n10').to('n3').addE('x').from('n1').to('n10').addE('y').from('n2').to('n6').addE('x').from('n3').to('n2').addE('y').from('n4').to('n4').addE('x').from('n5').to('n3').addE('y').from('n6').to('n8').addE('x').from('n7').to('n4').addE('y').from('n8').to('n3').addE('x').from('n9').to('n8').addE('y').from('n10').to('n9').addE('x').from('n1').to('n9').addE('y').from('n2').to('n5').addE('x').from('n3').to('n7').addE('y').from('n4').to('n9').addE('x').from('n5').to('n5').addE('y').from('n6').to('n5').addE('x').from('n7').to('n7').addE('y').from('n8').to('n7').addE('x').from('n9').to('n9').addE('y').from('n10').to('n5').barrier().limit(0)
```
Contributor guide
Research direction
Start by running the two traversal queries against the supplied graph-construction reproducer and compare where their results diverge. Trace how the additional as('s2') label affects traversal execution, then confirm that equivalent queries produce the same count without changing the stated reproduction conditions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100