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();
      }
  

Reply via email to