cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Yang Yang (Issue Comment Edited) (JIRA)" <j...@apache.org>
Subject [jira] [Issue Comment Edited] (CASSANDRA-3390) ReadResponseSerializer.serializedSize() calculation is wrong
Date Sun, 23 Oct 2011 07:31:32 GMT

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

Yang Yang edited comment on CASSANDRA-3390 at 10/23/11 7:31 AM:
----------------------------------------------------------------

Jonathan: I see what you mean:

the returned CF from cachedRow, in CFS.java:1169 :



    /**
     *  Filter a cached row, which will not be modified by the filter, but may be modified
by throwing out
     *  tombstones that are no longer relevant.
     *  The returned column family won't be thread safe.
     */
    ColumnFamily filterColumnFamily(ColumnFamily cached, QueryFilter filter, int gcBefore)
    {

it seems that for some CFs, the buffer.length() was calculated, then another thread did the

removeDeletedColumns() for expiring columns in filterColumnFamily(), then serializedSize()
was calculated again, something like that.

if that is the case, would it actually cause correctness problems, or is it just an annoying
discrepancy between 2 reports on the size (which reflect the size at 2 times in history)?




                
      was (Author: yangyangyyy):
    Jonathan: I see what you mean:

the returned CF from cachedRow, in CFS.java:1169 :



    /**
     *  Filter a cached row, which will not be modified by the filter, but may be modified
by throwing out
     *  tombstones that are no longer relevant.
     *  The returned column family won't be thread safe.
     */
    ColumnFamily filterColumnFamily(ColumnFamily cached, QueryFilter filter, int gcBefore)
    {

it seems that for some CFs, the buffer.length() was calculated, then another thread did the

removeDeletedColumns() for expiring columns in filterColumnFamily(), then serializedSize()
was calculated again, 

if that is the case, would it actually cause correctness problems, or is it just an annoying
discrepancy between 2 reports on the size (which reflect the size at 2 times in history)?

something like that.


                  
> 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
>             Fix For: 1.0.1
>
>         Attachments: 3390.patch
>
>
> 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

        

Mime
View raw message