[ 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