[ 
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)

Reply via email to