cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alex Petrov (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-12694) PAXOS Update Corrupted empty row exception
Date Wed, 05 Oct 2016 11:17:20 GMT

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

Mime
View raw message