JanusGraph / JanusGraph/janusgraph

Error when reading property on vertex: java.lang.IllegalArgumentException: Comparison method violates its general contract!

Open
#1,817 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.