Details
-
Bug
-
Status: Resolved
-
Normal
-
Resolution: Fixed
-
None
-
None
-
Normal
Description
[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).