[
https://issues.apache.org/jira/browse/CASSANDRA-8448?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Brandon Williams updated CASSANDRA-8448:
----------------------------------------
Attachment: 8448-v2.txt
bq. The current patch is a no-op...?
Whoops, that was silly :)
I think creating a new DES within DES just to sort is going to get very hairy
very quickly. Instead, v2 locks the update and reset tasks so they can't
modify scores while we're sorting. This shouldn't be a big problem if they're
blocked for a while during the sort.
> "Comparison method violates its general contract" in AbstractEndpointSnitch
> ---------------------------------------------------------------------------
>
> Key: CASSANDRA-8448
> URL: https://issues.apache.org/jira/browse/CASSANDRA-8448
> Project: Cassandra
> Issue Type: Bug
> Reporter: J.B. Langston
> Assignee: Brandon Williams
> Fix For: 2.1.3, 2.0.13
>
> Attachments: 8448-v2.txt, 8448.txt
>
>
> Seen in both 1.2 and 2.0. The error is occurring here:
> https://github.com/apache/cassandra/blob/cassandra-2.0/src/java/org/apache/cassandra/locator/AbstractEndpointSnitch.java#L49
> {code}
> ERROR [Thrift:9] 2014-12-04 20:12:28,732 CustomTThreadPoolServer.java (line
> 219) Error occurred during processing of message.
> com.google.common.util.concurrent.UncheckedExecutionException:
> java.lang.IllegalArgumentException: Comparison method violates its general
> contract!
> at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2199)
> at com.google.common.cache.LocalCache.get(LocalCache.java:3932)
> at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3936)
> at
> com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4806)
> at
> org.apache.cassandra.service.ClientState.authorize(ClientState.java:352)
> at
> org.apache.cassandra.service.ClientState.ensureHasPermission(ClientState.java:224)
> at
> org.apache.cassandra.service.ClientState.hasAccess(ClientState.java:218)
> at
> org.apache.cassandra.service.ClientState.hasColumnFamilyAccess(ClientState.java:202)
> at
> org.apache.cassandra.thrift.CassandraServer.createMutationList(CassandraServer.java:822)
> at
> org.apache.cassandra.thrift.CassandraServer.batch_mutate(CassandraServer.java:954)
> at com.datastax.bdp.server.DseServer.batch_mutate(DseServer.java:576)
> at
> org.apache.cassandra.thrift.Cassandra$Processor$batch_mutate.getResult(Cassandra.java:3922)
> at
> org.apache.cassandra.thrift.Cassandra$Processor$batch_mutate.getResult(Cassandra.java:3906)
> at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
> at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
> at
> org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:201)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.IllegalArgumentException: Comparison method violates its
> general contract!
> at java.util.TimSort.mergeHi(TimSort.java:868)
> at java.util.TimSort.mergeAt(TimSort.java:485)
> at java.util.TimSort.mergeCollapse(TimSort.java:410)
> at java.util.TimSort.sort(TimSort.java:214)
> at java.util.TimSort.sort(TimSort.java:173)
> at java.util.Arrays.sort(Arrays.java:659)
> at java.util.Collections.sort(Collections.java:217)
> at
> org.apache.cassandra.locator.AbstractEndpointSnitch.sortByProximity(AbstractEndpointSnitch.java:49)
> at
> org.apache.cassandra.locator.DynamicEndpointSnitch.sortByProximityWithScore(DynamicEndpointSnitch.java:157)
> at
> org.apache.cassandra.locator.DynamicEndpointSnitch.sortByProximityWithBadness(DynamicEndpointSnitch.java:186)
> at
> org.apache.cassandra.locator.DynamicEndpointSnitch.sortByProximity(DynamicEndpointSnitch.java:151)
> at
> org.apache.cassandra.service.StorageProxy.getLiveSortedEndpoints(StorageProxy.java:1408)
> at
> org.apache.cassandra.service.StorageProxy.getLiveSortedEndpoints(StorageProxy.java:1402)
> at
> org.apache.cassandra.service.AbstractReadExecutor.getReadExecutor(AbstractReadExecutor.java:148)
> at
> org.apache.cassandra.service.StorageProxy.fetchRows(StorageProxy.java:1223)
> at
> org.apache.cassandra.service.StorageProxy.read(StorageProxy.java:1165)
> at
> org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:255)
> at
> org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:225)
> at org.apache.cassandra.auth.Auth.selectUser(Auth.java:243)
> at org.apache.cassandra.auth.Auth.isSuperuser(Auth.java:84)
> at
> org.apache.cassandra.auth.AuthenticatedUser.isSuper(AuthenticatedUser.java:50)
> at
> org.apache.cassandra.auth.CassandraAuthorizer.authorize(CassandraAuthorizer.java:69)
> at org.apache.cassandra.service.ClientState$1.load(ClientState.java:338)
> at org.apache.cassandra.service.ClientState$1.load(ClientState.java:335)
> at
> com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3522)
> at
> com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2315)
> at
> com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2278)
> at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2193)
> ... 18 more
> {code}
> Workaround: Setting -Djava.util.Arrays.useLegacyMergeSort=true causes the
> error to go away.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)