Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 058A110677 for ; Sat, 22 Mar 2014 00:42:53 +0000 (UTC) Received: (qmail 5545 invoked by uid 500); 22 Mar 2014 00:42:51 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 5464 invoked by uid 500); 22 Mar 2014 00:42:50 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 5246 invoked by uid 99); 22 Mar 2014 00:42:43 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 22 Mar 2014 00:42:43 +0000 Date: Sat, 22 Mar 2014 00:42:43 +0000 (UTC) From: "Mikhail Stepura (JIRA)" To: commits@cassandra.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (CASSANDRA-6879) ConcurrentModificationException while doing range slice query. MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/CASSANDRA-6879?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13943796#comment-13943796 ] Mikhail Stepura commented on CASSANDRA-6879: -------------------------------------------- +1, LGTM > ConcurrentModificationException while doing range slice query. > -------------------------------------------------------------- > > Key: CASSANDRA-6879 > URL: https://issues.apache.org/jira/browse/CASSANDRA-6879 > Project: Cassandra > Issue Type: Bug > Components: Core > Environment: 2.0.4 > Reporter: Shao-Chuan Wang > Assignee: Jonathan Ellis > Fix For: 2.0.7 > > Attachments: 6879.txt > > > The paging read request (either from thrift or native) would sporadically fail due to a race condition between read repair and requesting thread waiting for read repair results list. The READ_REPAIR is queued in ReadCallback.maybeResolveForRepair(), and it does not seem to have guarantee that its resolve() method (which internally create RangeSliceResponseResolver.Reducer and doing repairResults.addAll inside RangeSliceResponseResolver.Reducer) would be invoked before the requesting thread starts waiting on resolver.repairResults. So, there is a small window that the list is partially populated, while requesting thread starts waiting on repairResults. I believe for the most of the time, the requesting thread is either wait for the entire repair results or not waiting for repair results at all. The original intent here seems to be waiting for repair results always (if the repair is triggered by repair chance). > {code} > ERROR [Native-Transport-Requests:70827] 2014-03-18 05:00:12,774 ErrorMessage.java (line 222) Unexpected exception during request > java.util.ConcurrentModificationException > at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) > at java.util.ArrayList$Itr.next(ArrayList.java:831) > at org.apache.cassandra.utils.FBUtilities.waitOnFutures(FBUtilities.java:423) > at org.apache.cassandra.service.StorageProxy.getRangeSlice(StorageProxy.java:1583) > at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:188) > at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:163) > at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:58) > at org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:188) > at org.apache.cassandra.cql3.QueryProcessor.processPrepared(QueryProcessor.java:358) > at org.apache.cassandra.transport.messages.ExecuteMessage.execute(ExecuteMessage.java:131) > at org.apache.cassandra.transport.Message$Dispatcher.messageReceived(Message.java:304) > at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) > at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) > at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) > at org.jboss.netty.handler.execution.ChannelUpstreamEventRunnable.doRun(ChannelUpstreamEventRunnable.java:43) > at org.jboss.netty.handler.execution.ChannelEventRunnable.run(ChannelEventRunnable.java:67) > 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:744) > {code} > {code} > ERROR [Thrift:1] 2014-03-18 07:18:02,434 CustomTThreadPoolServer.java (line 212) Error occurred during processing of message. > java.util.ConcurrentModificationException > at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) > at java.util.ArrayList$Itr.next(ArrayList.java:831) > at org.apache.cassandra.utils.FBUtilities.waitOnFutures(FBUtilities.java:423) > at org.apache.cassandra.service.StorageProxy.getRangeSlice(StorageProxy.java:1583) > at org.apache.cassandra.service.pager.RangeSliceQueryPager.queryNextPage(RangeSliceQueryPager.java:85) > at org.apache.cassandra.service.pager.AbstractQueryPager.fetchPage(AbstractQueryPager.java:71) > at org.apache.cassandra.service.pager.RangeSliceQueryPager.fetchPage(RangeSliceQueryPager.java:36) > at org.apache.cassandra.cql3.statements.SelectStatement.pageCountQuery(SelectStatement.java:202) > at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:169) > at org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:58) > at org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:188) > at org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:222) > at org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:212) > at org.apache.cassandra.thrift.CassandraServer.execute_cql3_query(CassandraServer.java:1958) > at org.apache.cassandra.thrift.Cassandra$Processor$execute_cql3_query.getResult(Cassandra.java:4486) > at org.apache.cassandra.thrift.Cassandra$Processor$execute_cql3_query.getResult(Cassandra.java:4470) > 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:194) > 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:744) > {code} -- This message was sent by Atlassian JIRA (v6.2#6252)