You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2015/05/29 11:11:11 UTC
[1/3] cassandra git commit: Fix condition in RangeTombstoneList.add
that breaks test
Repository: cassandra
Updated Branches:
refs/heads/cassandra-2.2 180130a8e -> 302eb46c8
Fix condition in RangeTombstoneList.add that breaks test
patch by aweisberg; reviewed by slebresne for CASSANDRA-9485
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/173f2552
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/173f2552
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/173f2552
Branch: refs/heads/cassandra-2.2
Commit: 173f2552d10b5d081888f62864c40380622097e7
Parents: 04eba90
Author: Ariel Weisberg <ar...@datastax.com>
Authored: Fri May 29 10:50:15 2015 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Fri May 29 10:54:40 2015 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/db/RangeTombstoneList.java | 4 +--
.../cassandra/db/RangeTombstoneListTest.java | 28 ++++++++++++++++----
3 files changed, 26 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/173f2552/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 58f3c53..b9a0131 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.0.16:
+ * 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/173f2552/src/java/org/apache/cassandra/db/RangeTombstoneList.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/RangeTombstoneList.java b/src/java/org/apache/cassandra/db/RangeTombstoneList.java
index b49c2fc..165718e 100644
--- a/src/java/org/apache/cassandra/db/RangeTombstoneList.java
+++ b/src/java/org/apache/cassandra/db/RangeTombstoneList.java
@@ -116,7 +116,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>
/**
* 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)
@@ -130,7 +130,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>
int c = comparator.compare(ends[size-1], start);
// Fast path if we add in sorted order
- if (c <= 0)
+ if (c < 0)
{
addInternal(size, start, end, markedAt, delTime);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/173f2552/test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java b/test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java
index b0065e0..2a7c90f 100644
--- a/test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java
+++ b/test/unit/org/apache/cassandra/db/RangeTombstoneListTest.java
@@ -30,7 +30,6 @@ import org.apache.cassandra.utils.ByteBufferUtil;
public class RangeTombstoneListTest
{
private static final Comparator<ByteBuffer> cmp = IntegerType.instance;
- private static final Random rand = new Random();
@Test
public void sortedAdditionTest()
@@ -296,7 +295,23 @@ public class RangeTombstoneListTest
assertEquals(6, l.maxMarkedAt());
}
- private RangeTombstoneList makeRandom(int size, int maxItSize, int maxItDistance, int maxMarkedAt)
+ @Test
+ public void insertSameTest()
+ {
+ // Simple test that adding the same element multiple time ends up
+ // with that element only a single time (CASSANDRA-9485)
+
+ RangeTombstoneList l = new RangeTombstoneList(cmp, 0);
+ l.add(rt(4, 4, 5, 100));
+ l.add(rt(4, 4, 6, 110));
+ l.add(rt(4, 4, 4, 90));
+
+ Iterator<RangeTombstone> iter = l.iterator();
+ assertRT(rt(4, 4, 6, 110), iter.next());
+ assert !iter.hasNext();
+ }
+
+ private RangeTombstoneList makeRandom(Random rand, int size, int maxItSize, int maxItDistance, int maxMarkedAt)
{
RangeTombstoneList l = new RangeTombstoneList(cmp, size);
@@ -329,10 +344,13 @@ public class RangeTombstoneListTest
int MAX_IT_DISTANCE = 10;
int MAX_MARKEDAT = 10;
+ long seed = System.nanoTime();
+ Random rand = new Random(seed);
+
for (int i = 0; i < TEST_COUNT; i++)
{
- RangeTombstoneList l1 = makeRandom(rand.nextInt(MAX_LIST_SIZE) + 1, rand.nextInt(MAX_IT_SIZE) + 1, rand.nextInt(MAX_IT_DISTANCE) + 1, rand.nextInt(MAX_MARKEDAT) + 1);
- RangeTombstoneList l2 = makeRandom(rand.nextInt(MAX_LIST_SIZE) + 1, rand.nextInt(MAX_IT_SIZE) + 1, rand.nextInt(MAX_IT_DISTANCE) + 1, rand.nextInt(MAX_MARKEDAT) + 1);
+ RangeTombstoneList l1 = makeRandom(rand, rand.nextInt(MAX_LIST_SIZE) + 1, rand.nextInt(MAX_IT_SIZE) + 1, rand.nextInt(MAX_IT_DISTANCE) + 1, rand.nextInt(MAX_MARKEDAT) + 1);
+ RangeTombstoneList l2 = makeRandom(rand, rand.nextInt(MAX_LIST_SIZE) + 1, rand.nextInt(MAX_IT_SIZE) + 1, rand.nextInt(MAX_IT_DISTANCE) + 1, rand.nextInt(MAX_MARKEDAT) + 1);
RangeTombstoneList l1Initial = l1.copy();
@@ -346,7 +364,7 @@ public class RangeTombstoneListTest
{
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;
}
}
[3/3] cassandra git commit: Merge branch 'cassandra-2.1' into
cassandra-2.2
Posted by sl...@apache.org.
Merge branch 'cassandra-2.1' into cassandra-2.2
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/302eb46c
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/302eb46c
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/302eb46c
Branch: refs/heads/cassandra-2.2
Commit: 302eb46c8cd165fbacb950fd99760470b9f8f751
Parents: 180130a e1a67a4
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Fri May 29 11:05:53 2015 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Fri May 29 11:05:53 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/302eb46c/CHANGES.txt
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/302eb46c/src/java/org/apache/cassandra/db/RangeTombstoneList.java
----------------------------------------------------------------------
[2/3] cassandra git commit: Merge branch 'cassandra-2.0' into
cassandra-2.1
Posted by sl...@apache.org.
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/cassandra-2.2
Commit: e1a67a4f5361b7f069110c2c9779705ca99db28a
Parents: eaeabff 173f255
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Fri May 29 11:05:02 2015 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
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;
}
}