Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 7C89B200BA3 for ; Wed, 5 Oct 2016 13:17:22 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 7B302160AEB; Wed, 5 Oct 2016 11:17:22 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id BF59D160AEA for ; Wed, 5 Oct 2016 13:17:21 +0200 (CEST) Received: (qmail 14799 invoked by uid 500); 5 Oct 2016 11:17:20 -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 14498 invoked by uid 99); 5 Oct 2016 11:17:20 -0000 Received: from arcas.apache.org (HELO arcas) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 05 Oct 2016 11:17:20 +0000 Received: from arcas.apache.org (localhost [127.0.0.1]) by arcas (Postfix) with ESMTP id 97CFB2C2A6A for ; Wed, 5 Oct 2016 11:17:20 +0000 (UTC) Date: Wed, 5 Oct 2016 11:17:20 +0000 (UTC) From: "Alex Petrov (JIRA)" To: commits@cassandra.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (CASSANDRA-12694) PAXOS Update Corrupted empty row exception MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Wed, 05 Oct 2016 11:17:22 -0000 [ https://issues.apache.org/jira/browse/CASSANDRA-12694?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15548420#comment-15548420 ] Alex Petrov commented on CASSANDRA-12694: ----------------------------------------- Thank you for the comment. 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. Problem with switching to {{allColumns}} is that we (yet again) are going to break the failure result (which is not a problem on in unit tests, but we'll have even more special-casing on LWTs in dtest code), which was exactly the reason why I've chosen changing {{columnsToRead}} instead. I have tried the approach you describe and have opted out for the current version. I went through all combinations and cases and having the mentioned conditions satisfies all the requirements and can guarantee that we know whether or not partition exists, both in case with static and partition conditions and does not break the existing behaviour of what we return on CAS failure. We also did not do the same change (query all columns) in [CASSANDRA-12060] and opted out for special-casing static columns with {{LIMIT 1}} in order to make sure that partition exists. > 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: > {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)