Merge branch 'cassandra-2.0' into cassandra-2.1
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/9449a701 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/9449a701 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/9449a701 Branch: refs/heads/cassandra-2.1 Commit: 9449a70162879884745a950666bfae0969b2608f Parents: 49d64c2 2e6492a Author: Yuki Morishita <[email protected]> Authored: Fri Apr 3 09:19:31 2015 -0500 Committer: Yuki Morishita <[email protected]> Committed: Fri Apr 3 09:19:31 2015 -0500 ---------------------------------------------------------------------- .../cassandra/db/compaction/LazilyCompactedRow.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/9449a701/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java index 88c87a4,9962d3f..56a4ede --- a/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java +++ b/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java @@@ -156,12 -141,14 +156,18 @@@ public class LazilyCompactedRow extend // blindly updating everything wouldn't be correct DataOutputBuffer out = new DataOutputBuffer(); ++ // initialize indexBuilder for the benefit of its tombstoneTracker, used by our reducing iterator ++ indexBuilder = new ColumnIndex.Builder(emptyColumnFamily, key.getKey(), out); ++ try { DeletionTime.serializer.serialize(emptyColumnFamily.deletionInfo().getTopLevelDeletion(), out); + // do not update digest in case of missing or purged row level tombstones, see CASSANDRA-8979 - if (emptyColumnFamily.deletionInfo().getTopLevelDeletion() != DeletionTime.LIVE) + // - digest for non-empty rows needs to be updated with deletion in any case to match digest with versions before patch + // - empty rows must not update digest in case of LIVE delete status to avoid mismatches with non-existing rows + // this will however introduce in return a digest mismatch for versions before patch (which would update digest in any case) - if (iter.hasNext() || emptyColumnFamily.deletionInfo().getTopLevelDeletion() != DeletionTime.LIVE) ++ if (merger.hasNext() || emptyColumnFamily.deletionInfo().getTopLevelDeletion() != DeletionTime.LIVE) { digest.update(out.getData(), 0, out.getLength()); } @@@ -171,10 -158,10 +177,8 @@@ throw new AssertionError(e); } -- // initialize indexBuilder for the benefit of its tombstoneTracker, used by our reducing iterator - indexBuilder = new ColumnIndex.Builder(emptyColumnFamily, key.getKey(), out); - indexBuilder = new ColumnIndex.Builder(emptyColumnFamily, key.key, out); - while (iter.hasNext()) - iter.next().updateDigest(digest); + while (merger.hasNext()) + merger.next().updateDigest(digest); close(); }
