[ 
https://issues.apache.org/jira/browse/CASSANDRA-3390?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13133886#comment-13133886
 ] 

Sylvain Lebresne commented on CASSANDRA-3390:
---------------------------------------------

bq.  We could try to preserve it by only skipping thie copy when the requested 
count == MAXINT

I don't think that would work either because If I understand correctly the 
problem, it's that when we serialize, we may add a column between when we 
compute the serialized size and when we do the actual serialization. The 
request count shouldn't make any difference here (besides, I agree with the 
contrary to best-practices argument).

I'll note that I think this optimization has always been wrong, because the cf 
can also change between when the column count is written in the serialization 
form and the actual write of the columns. If columns are added, we're kind of 
fine, we'll serialize more columns that advertised but the code will be ok. But 
it's possible to have a race where we actually remove columns, because a 
tombstone could be gced by another thread, in which case we could have a 
EOFException or something like that during deserialization (it's sufficiently 
unlikely that either nobody ran into it, or got it only once and never again 
and so didn't report it or something).

Anyway +1 on the patch, but I believe it would be correct to commit to 0.8 too 
for the above reason.
                
> ReadResponseSerializer.serializedSize() calculation is wrong
> ------------------------------------------------------------
>
>                 Key: CASSANDRA-3390
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-3390
>             Project: Cassandra
>          Issue Type: Bug
>    Affects Versions: 1.0.1
>            Reporter: Yang Yang
>            Assignee: Jonathan Ellis
>             Fix For: 1.0.1
>
>         Attachments: 3390.patch, 3390.txt
>
>
> in ReadResponse.java
> the following code
>     public long serializedSize(ReadResponse response, int version)
>     {
>         int size = DBConstants.intSize;
>         size += (response.isDigestQuery() ? response.digest() : 
> ByteBufferUtil.EMPTY_BYTE_BUFFER).remaining();
>         size += DBConstants.boolSize;
>         if (response.isDigestQuery())
>             size += response.digest().remaining();
>         else
>             size += Row.serializer().serializedSize(response.row(), version);
>         return size;
>     }
> adds the digest size 2 times
> this triggers assertion error in at least ReadVerbHandler

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to