You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Jun Rao (JIRA)" <ji...@apache.org> on 2009/07/09 17:32:14 UTC

[jira] Commented: (CASSANDRA-286) slice offset breaks read repair

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

Jun Rao commented on CASSANDRA-286:
-----------------------------------

This is a problem with any APIs relying on offset, instead of value. All columns before the offset affect the outcome. So, if there is any incorrect column (whether it's missing deletes or missing inserts) before the offset doesn't get fixed immediately, the outcome will be incorrect.

One potential fix is to include all columns before offset in the repair logic, but not in thrift return. This won't affect performance much since we already have to scan those columns. This may complicates the overall logic a bit though.
 

> slice offset breaks read repair
> -------------------------------
>
>                 Key: CASSANDRA-286
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-286
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Jonathan Ellis
>
> [code]
>         int liveColumns = 0;
>         int limit = offset + count;
>         for (IColumn column : reducedColumns)
>         {
>             if (liveColumns >= limit)
>                 break;
>             if (!finish.isEmpty()
>                 && ((isAscending && column.name().compareTo(finish) > 0))
>                     || (!isAscending && column.name().compareTo(finish) < 0))
>                 break;
>             if (!column.isMarkedForDelete())
>                 liveColumns++;
>             if (liveColumns > offset)
>                 returnCF.addColumn(column);
>         }
> [code]
> The problem is that for offset to return the correct "live" columns, it has to ignore tombstones it scans before the first live one post-offset.
> This means that instead of being corrected within a few ms of a read, a node can continue returning deleted data indefinitely (until the next anti-entropy pass).
> Coupled with offset's inherent inefficiency (see CASSANDRA-261) I think this means we should take it out and leave offset to be computed client-side (which, for datasets under which it was reasonable server-side, will still be reasonable).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.