Details
-
Bug
-
Status: Resolved
-
Normal
-
Resolution: Fixed
-
None
-
None
-
Normal
Description
Since cleanup switched to per-sstable operation (CASSANDRA-1916), the main loop looks like this:
if (Range.isTokenInRanges(row.getKey().token, ranges)) { writer = maybeCreateWriter(sstable, compactionFileLocation, expectedBloomFilterSize, writer); writer.append(new EchoedRow(row)); totalkeysWritten++; } else { while (row.hasNext()) { IColumn column = row.next(); if (indexedColumns.contains(column.name())) Table.cleanupIndexEntry(cfs, row.getKey().key, column); } }
... that is, rows that haven't changed we copy to the new sstable without deserializing, with EchoedRow. But, the new sstable is created with CURRENT_VERSION which may not be what the old data consisted of.
(This could cause symptoms similar to CASSANDRA-2195 but I do not think it is the cause of that bug; IIRC the cluster in question there was not upgraded from an older Cassandra.)