cassandra-commits mailing list archives

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

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

Mime
View raw message