[ https://issues.apache.org/jira/browse/CASSANDRA-12694?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15548711#comment-15548711 ]
Sylvain Lebresne commented on CASSANDRA-12694: ---------------------------------------------- bq. The javadoc on {{ColumnFilter}} also says that it's ok to use selection for some internal purposes, and it seems to me that this is exactly the case. Well, as luck as it, I wrote both the class and comment, and this is not a case that the comment meant to cover. The sole purpose of having different "selection" and "all columns" builders is to distinguish between the cases where you care about the difference between "the row exists but has null values for every column queried" and "the row doesn't exist" (job for the "all columns" builder) and cases where it doesn't matter (job for the "selection" builder). Unless I'm misunderstanding this ticket, the problem here is exactly that we want to make the difference between those two cases, so it should use a "all columns" builder or you're defeating the whole purpose of the {{queried}} versus {{fetched}} nuance {{ColumnFilter}} makes. bq. Problem with switching to {{allColumns}} is that we (yet again) are going to break the failure result If you could be more specific on what you mean here, that would be helpful. Is the problem specific to static columns maybe? bq. We also did not do the same change (query all columns) in CASSANDRA-12060 You're mixing different things. CASSANDRA-12060 was about checking partition existence. Which columns you read impact row existence. > PAXOS Update Corrupted empty row exception > ------------------------------------------ > > Key: CASSANDRA-12694 > URL: https://issues.apache.org/jira/browse/CASSANDRA-12694 > Project: Cassandra > Issue Type: Bug > Components: Local Write-Read Paths > Environment: 3 node cluster using RF=3 running on cassandra 3.7 > Reporter: Cameron Zemek > Assignee: Alex Petrov > > {noformat} > cqlsh> create table test.test (test_id TEXT, last_updated TIMESTAMP, > message_id TEXT, PRIMARY KEY(test_id)); > update test.test set last_updated = 1474494363669 where test_id = 'test1' if > message_id = null; > {noformat} > Then nodetool flush on the all 3 nodes. > {noformat} > cqlsh> update test.test set last_updated = 1474494363669 where test_id = > 'test1' if message_id = null; > ServerError: <ErrorMessage code=0000 [Server error] message="java.io.IOError: > java.io.IOException: Corrupt empty row found in unfiltered partition"> > {noformat} > From cassandra log > {noformat} > ERROR [SharedPool-Worker-1] 2016-09-23 12:09:13,179 Message.java:611 - > Unexpected exception during request; channel = [id: 0x7a22599e, > L:/127.0.0.1:9042 - R:/127.0.0.1:58297] > java.io.IOError: java.io.IOException: Corrupt empty row found in unfiltered > partition > at > org.apache.cassandra.db.rows.UnfilteredRowIteratorSerializer$1.computeNext(UnfilteredRowIteratorSerializer.java:224) > ~[main/:na] > at > org.apache.cassandra.db.rows.UnfilteredRowIteratorSerializer$1.computeNext(UnfilteredRowIteratorSerializer.java:212) > ~[main/:na] > at > org.apache.cassandra.utils.AbstractIterator.hasNext(AbstractIterator.java:47) > ~[main/:na] > at > org.apache.cassandra.db.rows.UnfilteredRowIterators.digest(UnfilteredRowIterators.java:125) > ~[main/:na] > at > org.apache.cassandra.db.partitions.UnfilteredPartitionIterators.digest(UnfilteredPartitionIterators.java:249) > ~[main/:na] > at > org.apache.cassandra.db.ReadResponse.makeDigest(ReadResponse.java:87) > ~[main/:na] > at > org.apache.cassandra.db.ReadResponse$DataResponse.digest(ReadResponse.java:192) > ~[main/:na] > at > org.apache.cassandra.service.DigestResolver.resolve(DigestResolver.java:80) > ~[main/:na] > at > org.apache.cassandra.service.ReadCallback.get(ReadCallback.java:139) > ~[main/:na] > at > org.apache.cassandra.service.AbstractReadExecutor.get(AbstractReadExecutor.java:145) > ~[main/:na] > at > org.apache.cassandra.service.StorageProxy$SinglePartitionReadLifecycle.awaitResultsAndRetryOnDigestMismatch(StorageProxy.java:1714) > ~[main/:na] > at > org.apache.cassandra.service.StorageProxy.fetchRows(StorageProxy.java:1663) > ~[main/:na] > at > org.apache.cassandra.service.StorageProxy.readRegular(StorageProxy.java:1604) > ~[main/:na] > at > org.apache.cassandra.service.StorageProxy.read(StorageProxy.java:1523) > ~[main/:na] > at > org.apache.cassandra.service.StorageProxy.readOne(StorageProxy.java:1497) > ~[main/:na] > at > org.apache.cassandra.service.StorageProxy.readOne(StorageProxy.java:1491) > ~[main/:na] > at > org.apache.cassandra.service.StorageProxy.cas(StorageProxy.java:249) > ~[main/:na] > at > org.apache.cassandra.cql3.statements.ModificationStatement.executeWithCondition(ModificationStatement.java:441) > ~[main/:na] > at > org.apache.cassandra.cql3.statements.ModificationStatement.execute(ModificationStatement.java:416) > ~[main/:na] > at > org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:208) > ~[main/:na] > at > org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:239) > ~[main/:na] > at > org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:224) > ~[main/:na] > at > org.apache.cassandra.transport.messages.QueryMessage.execute(QueryMessage.java:115) > ~[main/:na] > at > org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:507) > [main/:na] > at > org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:401) > [main/:na] > {noformat} -- This message was sent by Atlassian JIRA (v6.3.4#6332)