[ https://issues.apache.org/jira/browse/CASSANDRA-7873?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Benedict updated CASSANDRA-7873: -------------------------------- Attachment: 7873.txt I don't think we changed to synchronized(List) for performance; as far as I recall we made an arbitrary choice between the two on merge (I can't find mention of it on JIRA though). In 2.1 we're using CLQ, I think there was a different merge conflict against trunk. We should probably normalise the two. Looking at it, both are fine and acceptable and we're unlikely to measure any difference, however if we stick with CLQ we should calculate its size only once in RowDataResolver.resolve() (instead of 4 times). The difference is CLQ will avoid some random thread parking which will slightly help latency on a small percentage of runs (almost certainly lost in the noise), whereas synchronized(List) will guarantee constant time size-of-response calculation. But this will usually be small enough to likely be imperceptible. Another option is to use the attached patch, which provides a simple non-blocking collection that has the optimal characteristics on all of these fronts. > java.util.ConcurrentModificationException seen after selecting from > system_auth > ------------------------------------------------------------------------------- > > Key: CASSANDRA-7873 > URL: https://issues.apache.org/jira/browse/CASSANDRA-7873 > Project: Cassandra > Issue Type: Bug > Environment: OSX and Ubuntu 14.04 > Reporter: Philip Thompson > Fix For: 3.0 > > Attachments: 7873.txt > > > The dtest auth_test.py:TestAuth.system_auth_ks_is_alterable_test is failing > on trunk only with the following stack trace: > {code} > Unexpected error in node1 node log: > ERROR [Thrift:1] 2014-09-03 15:48:08,389 CustomTThreadPoolServer.java:219 - > Error occurred during processing of message. > java.util.ConcurrentModificationException: null > at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) > ~[na:1.7.0_65] > at java.util.ArrayList$Itr.next(ArrayList.java:831) ~[na:1.7.0_65] > at > org.apache.cassandra.service.RowDigestResolver.resolve(RowDigestResolver.java:71) > ~[main/:na] > at > org.apache.cassandra.service.RowDigestResolver.resolve(RowDigestResolver.java:28) > ~[main/:na] > at org.apache.cassandra.service.ReadCallback.get(ReadCallback.java:110) > ~[main/:na] > at > org.apache.cassandra.service.AbstractReadExecutor.get(AbstractReadExecutor.java:144) > ~[main/:na] > at > org.apache.cassandra.service.StorageProxy.fetchRows(StorageProxy.java:1228) > ~[main/:na] > at > org.apache.cassandra.service.StorageProxy.read(StorageProxy.java:1154) > ~[main/:na] > at > org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:256) > ~[main/:na] > at > org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:212) > ~[main/:na] > at org.apache.cassandra.auth.Auth.selectUser(Auth.java:257) ~[main/:na] > at org.apache.cassandra.auth.Auth.isExistingUser(Auth.java:76) > ~[main/:na] > at org.apache.cassandra.service.ClientState.login(ClientState.java:178) > ~[main/:na] > at > org.apache.cassandra.thrift.CassandraServer.login(CassandraServer.java:1486) > ~[main/:na] > at > org.apache.cassandra.thrift.Cassandra$Processor$login.getResult(Cassandra.java:3579) > ~[thrift/:na] > at > org.apache.cassandra.thrift.Cassandra$Processor$login.getResult(Cassandra.java:3563) > ~[thrift/:na] > at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39) > ~[libthrift-0.9.1.jar:0.9.1] > at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39) > ~[libthrift-0.9.1.jar:0.9.1] > at > org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:201) > ~[main/:na] > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > [na:1.7.0_65] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > [na:1.7.0_65] > at java.lang.Thread.run(Thread.java:745) [na:1.7.0_65] > {code} > That exception is thrown when the following query is sent: > {code} > """SELECT strategy_options > FROM system.schema_keyspaces > WHERE keyspace_name = 'system_auth'""" > {code} > The test alters the RF of the system_auth keyspace, then shuts down and > restarts the cluster. -- This message was sent by Atlassian JIRA (v6.3.4#6332)