JanusGraph / JanusGraph/janusgraph
Error when reading property on vertex: java.lang.IllegalArgumentException: Comparison method violates its general contract!
- Dominant language
- Java
- Stars
- 5.8k
- Forks
- 1.2k
- Avg merge
- 13h 53m
- Merged PRs (30d)
- 6
Description
Janus version 0.2.0. In my code I am simply trying to read a property value from a vertex that I fetched from the graph. Vertex is partitioned.
Here is the relevant stack trace from the janus code:
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:777)
at java.util.TimSort.mergeAt(TimSort.java:514)
at java.util.TimSort.mergeCollapse(TimSort.java:441)
at java.util.TimSort.sort(TimSort.java:245)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1462)
at java.util.Collections.sort(Collections.java:175)
at org.janusgraph.graphdb.query.QueryProcessor.getUnfoldedIterator(QueryProcessor.java:93)
at org.janusgraph.graphdb.query.QueryProcessor.iterator(QueryProcessor.java:68)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultMergeSortIterator$1.iterator(ResultMergeSortIterator.java:110)
at org.janusgraph.graphdb.query.ResultSetIterator$1.iterator(ResultSetIterator.java:84)
at org.janusgraph.graphdb.query.vertex.VertexCentricQueryBuilder.execute(VertexCentricQueryBuilder.java:73)
at org.janusgraph.graphdb.query.vertex.VertexCentricQueryBuilder.properties(VertexCentricQueryBuilder.java:100)
at org.janusgraph.graphdb.vertices.AbstractVertex.properties(AbstractVertex.java:173)
at org.apache.tinkerpop.gremlin.structure.Vertex.property(Vertex.java:70)
Issue was resolved by setting -Djava.util.Arrays.useLegacyMergeSort=true
I don't have a repro.
Thanks for the help!
Contributor guide
Research direction
Start at org.janusgraph.graphdb.query.QueryProcessor.getUnfoldedIterator, especially line 93 where sorting is reported, and trace the ResultMergeSortIterator and VertexCentricQueryBuilder calls. The issue has no reproduction, so establish the failing partitioned-vertex property read before investigating. Done means the read no longer throws the comparator exception without relying on the legacy merge-sort setting.
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
- Needs clarification
- Newbie friendliness
- 25/100