Merge branch 'cassandra-2.0' into cassandra-2.1

Conflicts:
        CHANGES.txt
        test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/e1a67a4f
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/e1a67a4f
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/e1a67a4f

Branch: refs/heads/trunk
Commit: e1a67a4f5361b7f069110c2c9779705ca99db28a
Parents: eaeabff 173f255
Author: Sylvain Lebresne <[email protected]>
Authored: Fri May 29 11:05:02 2015 +0200
Committer: Sylvain Lebresne <[email protected]>
Committed: Fri May 29 11:05:02 2015 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../apache/cassandra/db/RangeTombstoneList.java |  4 +--
 .../cassandra/db/RangeTombstoneListTest.java    | 27 +++++++++++++++++---
 3 files changed, 26 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/e1a67a4f/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 0e759b7,b9a0131..422f66e
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,35 -1,5 +1,36 @@@
 -2.0.16:
 +2.1.6
 + * Avoid getting unreadable keys during anticompaction (CASSANDRA-9508)
 + * (cqlsh) Better float precision by default (CASSANDRA-9224)
 + * Improve estimated row count (CASSANDRA-9107)
 + * Optimize range tombstone memory footprint (CASSANDRA-8603)
 + * Use configured gcgs in anticompaction (CASSANDRA-9397)
 + * Warn on misuse of unlogged batches (CASSANDRA-9282)
 + * Failure detector detects and ignores local pauses (CASSANDRA-9183)
 + * Add utility class to support for rate limiting a given log statement 
(CASSANDRA-9029)
 + * Add missing consistency levels to cassandra-stess (CASSANDRA-9361)
 + * Fix commitlog getCompletedTasks to not increment (CASSANDRA-9339)
 + * Fix for harmless exceptions logged as ERROR (CASSANDRA-8564)
 + * Delete processed sstables in sstablesplit/sstableupgrade (CASSANDRA-8606)
 + * Improve sstable exclusion from partition tombstones (CASSANDRA-9298)
 + * Validate the indexed column rather than the cell's contents for 2i 
(CASSANDRA-9057)
 + * Add support for top-k custom 2i queries (CASSANDRA-8717)
 + * Fix error when dropping table during compaction (CASSANDRA-9251)
 + * cassandra-stress supports validation operations over user profiles 
(CASSANDRA-8773)
 + * Add support for rate limiting log messages (CASSANDRA-9029)
 + * Log the partition key with tombstone warnings (CASSANDRA-8561)
 + * Reduce runWithCompactionsDisabled poll interval to 1ms (CASSANDRA-9271)
 + * Fix PITR commitlog replay (CASSANDRA-9195)
 + * GCInspector logs very different times (CASSANDRA-9124)
 + * Fix deleting from an empty list (CASSANDRA-9198)
 + * Update tuple and collection types that use a user-defined type when that 
UDT
 +   is modified (CASSANDRA-9148, CASSANDRA-9192)
 + * Use higher timeout for prepair and snapshot in repair (CASSANDRA-9261)
 + * Fix anticompaction blocking ANTI_ENTROPY stage (CASSANDRA-9151)
 + * Repair waits for anticompaction to finish (CASSANDRA-9097)
 + * Fix streaming not holding ref when stream error (CASSANDRA-9295)
 + * Fix canonical view returning early opened SSTables (CASSANDRA-9396)
 +Merged from 2.0:
+  * Fix bad condition in RangeTombstoneList (CASSANDRA-9485)
   * Fix potential StackOverflow when setting CrcCheckChance over JMX 
(CASSANDRA-9488)
   * Fix null static columns in pages after the first, paged reversed
     queries (CASSANDRA-8502)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/e1a67a4f/src/java/org/apache/cassandra/db/RangeTombstoneList.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/RangeTombstoneList.java
index c0ab42b,165718e..bd6e669
--- a/src/java/org/apache/cassandra/db/RangeTombstoneList.java
+++ b/src/java/org/apache/cassandra/db/RangeTombstoneList.java
@@@ -146,10 -116,10 +146,10 @@@ public class RangeTombstoneList impleme
      /**
       * Adds a new range tombstone.
       *
-      * This method will be faster if the new tombstone sort after all the 
currently existing ones (this is a common use case), 
+      * This method will be faster if the new tombstone sort after all the 
currently existing ones (this is a common use case),
       * but it doesn't assume it.
       */
 -    public void add(ByteBuffer start, ByteBuffer end, long markedAt, int 
delTime)
 +    public void add(Composite start, Composite end, long markedAt, int 
delTime)
      {
          if (isEmpty())
          {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/e1a67a4f/test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java
index 712cfa2,2a7c90f..7dc7300
--- a/test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java
+++ b/test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java
@@@ -30,179 -29,7 +30,178 @@@ import org.apache.cassandra.utils.ByteB
  
  public class RangeTombstoneListTest
  {
 -    private static final Comparator<ByteBuffer> cmp = IntegerType.instance;
 +    private static final Comparator<Composite> cmp = new 
SimpleDenseCellNameType(IntegerType.instance);
-     private static final Random rand = new Random();
 +
 +    @Test
 +    public void testDiff()
 +    {
 +        RangeTombstoneList superset;
 +        RangeTombstoneList subset;
 +        RangeTombstoneList diff;
 +        Iterator<RangeTombstone> iter;
 +
 +        // no difference
 +        superset = new RangeTombstoneList(cmp, 10);
 +        subset = new RangeTombstoneList(cmp, 10);
 +        superset.add(rt(1, 10, 10));
 +        superset.add(rt(20, 30, 10));
 +        superset.add(rt(40, 50, 10));
 +        subset.add(rt(1, 10, 10));
 +        subset.add(rt(20, 30, 10));
 +        subset.add(rt(40, 50, 10));
 +        assertNull( subset.diff(superset));
 +
 +        // all items in subset are contained by the first range in the 
superset
 +        superset = new RangeTombstoneList(cmp, 10);
 +        subset = new RangeTombstoneList(cmp, 10);
 +        subset.add(rt(1, 2, 3));
 +        subset.add(rt(3, 4, 4));
 +        subset.add(rt(5, 6, 5));
 +        superset.add(rt(1, 10, 10));
 +        superset.add(rt(20, 30, 10));
 +        superset.add(rt(40, 50, 10));
 +        diff = subset.diff(superset);
 +        iter = diff.iterator();
 +        assertRT(rt(1, 10, 10), iter.next());
 +        assertRT(rt(20, 30, 10), iter.next());
 +        assertRT(rt(40, 50, 10), iter.next());
 +        assertFalse(iter.hasNext());
 +
 +        // multiple subset RTs are contained by superset RTs
 +        superset = new RangeTombstoneList(cmp, 10);
 +        subset = new RangeTombstoneList(cmp, 10);
 +        subset.add(rt(1, 2, 1));
 +        subset.add(rt(3, 4, 2));
 +        subset.add(rt(5, 6, 3));
 +        superset.add(rt(1, 5, 2));
 +        superset.add(rt(5, 6, 3));
 +        superset.add(rt(6, 10, 2));
 +        diff = subset.diff(superset);
 +        iter = diff.iterator();
 +        assertRT(rt(1, 5, 2), iter.next());
 +        assertRT(rt(6, 10, 2), iter.next());
 +        assertFalse(iter.hasNext());
 +
 +        // the superset has one RT that covers the entire subset
 +        superset = new RangeTombstoneList(cmp, 10);
 +        subset = new RangeTombstoneList(cmp, 10);
 +        superset.add(rt(1, 50, 10));
 +        subset.add(rt(1, 10, 10));
 +        subset.add(rt(20, 30, 10));
 +        subset.add(rt(40, 50, 10));
 +        diff = subset.diff(superset);
 +        iter = diff.iterator();
 +        assertRT(rt(1, 50, 10), iter.next());
 +        assertFalse(iter.hasNext());
 +
 +        // the superset has one RT that covers the remainder of the subset
 +        superset = new RangeTombstoneList(cmp, 10);
 +        subset = new RangeTombstoneList(cmp, 10);
 +        superset.add(rt(1, 10, 10));
 +        superset.add(rt(20, 50, 10));
 +        subset.add(rt(1, 10, 10));
 +        subset.add(rt(20, 30, 10));
 +        subset.add(rt(40, 50, 10));
 +        diff = subset.diff(superset);
 +        iter = diff.iterator();
 +        assertRT(rt(20, 50, 10), iter.next());
 +        assertFalse(iter.hasNext());
 +
 +        // only the timestamp differs on one RT
 +        superset = new RangeTombstoneList(cmp, 10);
 +        subset = new RangeTombstoneList(cmp, 10);
 +        superset.add(rt(1, 10, 10));
 +        superset.add(rt(20, 30, 20));
 +        superset.add(rt(40, 50, 10));
 +        subset.add(rt(1, 10, 10));
 +        subset.add(rt(20, 30, 10));
 +        subset.add(rt(40, 50, 10));
 +        diff = subset.diff(superset);
 +        iter = diff.iterator();
 +        assertRT(rt(20, 30, 20), iter.next());
 +        assertFalse(iter.hasNext());
 +
 +        // superset has a large range on an RT at the start
 +        superset = new RangeTombstoneList(cmp, 10);
 +        subset = new RangeTombstoneList(cmp, 10);
 +        superset.add(rt(1, 10, 10));
 +        superset.add(rt(20, 30, 10));
 +        superset.add(rt(40, 50, 10));
 +        subset.add(rt(1, 2, 3));
 +        subset.add(rt(20, 30, 10));
 +        subset.add(rt(40, 50, 10));
 +        diff = subset.diff(superset);
 +        iter = diff.iterator();
 +        assertRT(rt(1, 10, 10), iter.next());
 +        assertFalse(iter.hasNext());
 +
 +        // superset has a larger range on an RT in the middle
 +        superset = new RangeTombstoneList(cmp, 10);
 +        subset = new RangeTombstoneList(cmp, 10);
 +        superset.add(rt(1, 10, 10));
 +        superset.add(rt(20, 30, 10));
 +        superset.add(rt(40, 50, 10));
 +        subset.add(rt(1, 10, 10));
 +        subset.add(rt(20, 25, 10));
 +        subset.add(rt(40, 50, 10));
 +        diff = subset.diff(superset);
 +        iter = diff.iterator();
 +        assertRT(rt(20, 30, 10), iter.next());
 +        assertFalse(iter.hasNext());
 +
 +        // superset has a larger range on an RT at the end
 +        superset = new RangeTombstoneList(cmp, 10);
 +        subset = new RangeTombstoneList(cmp, 10);
 +        superset.add(rt(1, 10, 10));
 +        superset.add(rt(20, 30, 10));
 +        superset.add(rt(40, 55, 10));
 +        subset.add(rt(1, 10, 10));
 +        subset.add(rt(20, 30, 10));
 +        subset.add(rt(40, 50, 10));
 +        diff = subset.diff(superset);
 +        iter = diff.iterator();
 +        assertRT(rt(40, 55, 10), iter.next());
 +        assertFalse(iter.hasNext());
 +
 +         // superset has one additional RT in the middle
 +        superset = new RangeTombstoneList(cmp, 10);
 +        subset = new RangeTombstoneList(cmp, 10);
 +        superset.add(rt(1, 10, 10));
 +        superset.add(rt(20, 30, 10));
 +        superset.add(rt(40, 50, 10));
 +        subset.add(rt(1, 10, 10));
 +        subset.add(rt(40, 50, 10));
 +        diff = subset.diff(superset);
 +        iter = diff.iterator();
 +        assertRT(rt(20, 30, 10), iter.next());
 +        assertFalse(iter.hasNext());
 +
 +        // superset has one additional RT at the start
 +        superset = new RangeTombstoneList(cmp, 10);
 +        subset = new RangeTombstoneList(cmp, 10);
 +        superset.add(rt(1, 10, 10));
 +        superset.add(rt(20, 30, 10));
 +        superset.add(rt(40, 50, 10));
 +        subset.add(rt(20, 30, 10));
 +        subset.add(rt(40, 50, 10));
 +        diff = subset.diff(superset);
 +        iter = diff.iterator();
 +        assertRT(rt(1, 10, 10), iter.next());
 +        assertFalse(iter.hasNext());
 +
 +        // superset has one additional RT at the end
 +        superset = new RangeTombstoneList(cmp, 10);
 +        subset = new RangeTombstoneList(cmp, 10);
 +        superset.add(rt(1, 10, 10));
 +        superset.add(rt(20, 30, 10));
 +        superset.add(rt(40, 50, 10));
 +        subset.add(rt(1, 10, 10));
 +        subset.add(rt(20, 30, 10));
 +        diff = subset.diff(superset);
 +        iter = diff.iterator();
 +        assertRT(rt(40, 50, 10), iter.next());
 +        assertFalse(iter.hasNext());
 +    }
  
      @Test
      public void sortedAdditionTest()
@@@ -512,7 -364,7 +530,8 @@@
              {
                  System.out.println("Error merging:");
                  System.out.println(" l1: " + toString(l1Initial));
 +                System.out.println(" l2: " + toString(l2));
+                 System.out.println("Seed was: " + seed);
                  throw e;
              }
          }

Reply via email to