[ https://issues.apache.org/jira/browse/CASSANDRA-9519?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14622321#comment-14622321 ]
Sylvain Lebresne commented on CASSANDRA-9519: --------------------------------------------- bq. My take from the stacktrace was that DES.sortByProximityWithScore was calling super to AES.sortByProximity which then had a problem with the array changing while being sorted. Well, the whole point of {{sortByProximity}} is to sort the list input in place, so if the caller changes the input behind our back, we have a very serious problem (and a quick scan of the call site indicates we do no such thing). In fact, your patch break {{sortByProximity}} plain and simple since it make it sort a local copy of the list that nobody ever gets (and the list that should be sorted isn't). Besides, the error message strongly suggests the problem is with the comparison method. bq. It would be nice if we had a test that could reproduce this so we don't have to play guessing games It's actually not all that hard. I've push on [my branch|https://github.com/pcmanus/cassandra/commits/9519] a test that on my box fail pretty reliably without the patch but haven't failed with it > CASSANDRA-8448 Doesn't seem to be fixed > --------------------------------------- > > Key: CASSANDRA-9519 > URL: https://issues.apache.org/jira/browse/CASSANDRA-9519 > Project: Cassandra > Issue Type: Bug > Components: Core > Reporter: Jeremiah Jordan > Fix For: 2.1.x, 2.2.x > > Attachments: 9519.txt > > > Still seeing the "Comparison method violates its general contract!" in 2.1.5 > {code} > java.lang.IllegalArgumentException: Comparison method violates its general > contract! > at java.util.TimSort.mergeHi(TimSort.java:895) ~[na:1.8.0_45] > at java.util.TimSort.mergeAt(TimSort.java:512) ~[na:1.8.0_45] > at java.util.TimSort.mergeCollapse(TimSort.java:437) ~[na:1.8.0_45] > at java.util.TimSort.sort(TimSort.java:241) ~[na:1.8.0_45] > at java.util.Arrays.sort(Arrays.java:1512) ~[na:1.8.0_45] > at java.util.ArrayList.sort(ArrayList.java:1454) ~[na:1.8.0_45] > at java.util.Collections.sort(Collections.java:175) ~[na:1.8.0_45] > at > org.apache.cassandra.locator.AbstractEndpointSnitch.sortByProximity(AbstractEndpointSnitch.java:49) > ~[cassandra-all-2.1.5.469.jar:2.1.5.469] > at > org.apache.cassandra.locator.DynamicEndpointSnitch.sortByProximityWithScore(DynamicEndpointSnitch.java:158) > ~[cassandra-all-2.1.5.469.jar:2.1.5.469] > at > org.apache.cassandra.locator.DynamicEndpointSnitch.sortByProximityWithBadness(DynamicEndpointSnitch.java:187) > ~[cassandra-all-2.1.5.469.jar:2.1.5.469] > at > org.apache.cassandra.locator.DynamicEndpointSnitch.sortByProximity(DynamicEndpointSnitch.java:152) > ~[cassandra-all-2.1.5.469.jar:2.1.5.469] > at > org.apache.cassandra.service.StorageProxy.getLiveSortedEndpoints(StorageProxy.java:1530) > ~[cassandra-all-2.1.5.469.jar:2.1.5.469] > at > org.apache.cassandra.service.StorageProxy.getRangeSlice(StorageProxy.java:1688) > ~[cassandra-all-2.1.5.469.jar:2.1.5.469] > at > org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:256) > ~[cassandra-all-2.1.5.469.jar:2.1.5.469] > at > org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:209) > ~[cassandra-all-2.1.5.469.jar:2.1.5.469] > at > org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:63) > ~[cassandra-all-2.1.5.469.jar:2.1.5.469] > at > org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:238) > ~[cassandra-all-2.1.5.469.jar:2.1.5.469] > at > org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:260) > ~[cassandra-all-2.1.5.469.jar:2.1.5.469] > at > org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:272) > ~[cassandra-all-2.1.5.469.jar:2.1.5.469] > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)