Repository: cassandra Updated Branches: refs/heads/trunk 894541304 -> 881776f35
Fix RowAndDeletionMergeIteratorTest patch by Daniel Chia; reviewed by Benjamin Lerer for CASSANDRA-10003 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/dea15092 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/dea15092 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/dea15092 Branch: refs/heads/trunk Commit: dea15092e5470b72786868d23413290068644c21 Parents: 0997ad6 Author: Daniel Chia <[email protected]> Authored: Tue Aug 11 17:00:05 2015 +0200 Committer: blerer <[email protected]> Committed: Tue Aug 11 17:00:05 2015 +0200 ---------------------------------------------------------------------- .../rows/RowAndDeletionMergeIteratorTest.java | 105 +++++++++++-------- 1 file changed, 63 insertions(+), 42 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/dea15092/test/unit/org/apache/cassandra/db/rows/RowAndDeletionMergeIteratorTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/db/rows/RowAndDeletionMergeIteratorTest.java b/test/unit/org/apache/cassandra/db/rows/RowAndDeletionMergeIteratorTest.java index 54bb344..84bbc57 100644 --- a/test/unit/org/apache/cassandra/db/rows/RowAndDeletionMergeIteratorTest.java +++ b/test/unit/org/apache/cassandra/db/rows/RowAndDeletionMergeIteratorTest.java @@ -94,7 +94,7 @@ public class RowAndDeletionMergeIteratorTest public void testWithOnlyRangeTombstones() { int delTime = nowInSeconds + 1; - long timestamp = delTime * 1000; + long timestamp = toMillis(delTime); Iterator<RangeTombstone> rangeTombstoneIterator = createRangeTombstoneIterator(rt(1, false, 3, false, timestamp, delTime), atLeast(4, timestamp, delTime)); @@ -121,7 +121,7 @@ public class RowAndDeletionMergeIteratorTest Iterator<Row> rowIterator = createRowIterator(); int delTime = nowInSeconds + 1; - long timestamp = delTime * 1000; + long timestamp = toMillis(delTime); Iterator<RangeTombstone> rangeTombstoneIterator = createRangeTombstoneIterator(atMost(0, timestamp, delTime)); @@ -131,9 +131,6 @@ public class RowAndDeletionMergeIteratorTest assertRtMarker(iterator.next(), Bound.BOTTOM); assertTrue(iterator.hasNext()); - assertRow(iterator.next(), 0); - - assertTrue(iterator.hasNext()); assertRtMarker(iterator.next(), ClusteringPrefix.Kind.INCL_END_BOUND, 0); assertTrue(iterator.hasNext()); @@ -157,7 +154,7 @@ public class RowAndDeletionMergeIteratorTest Iterator<Row> rowIterator = createRowIterator(); int delTime = nowInSeconds + 1; - long timestamp = delTime * 1000; + long timestamp = toMillis(delTime); Iterator<RangeTombstone> rangeTombstoneIterator = createRangeTombstoneIterator(greaterThan(2, timestamp, delTime)); @@ -176,12 +173,6 @@ public class RowAndDeletionMergeIteratorTest assertRtMarker(iterator.next(), ClusteringPrefix.Kind.EXCL_START_BOUND, 2); assertTrue(iterator.hasNext()); - assertRow(iterator.next(), 3); - - assertTrue(iterator.hasNext()); - assertRow(iterator.next(), 4); - - assertTrue(iterator.hasNext()); assertRtMarker(iterator.next(), Bound.TOP); assertFalse(iterator.hasNext()); @@ -193,7 +184,7 @@ public class RowAndDeletionMergeIteratorTest Iterator<Row> rowIterator = createRowIterator(); int delTime = nowInSeconds + 1; - long timestamp = delTime * 1000; + long timestamp = toMillis(delTime); Iterator<RangeTombstone> rangeTombstoneIterator = createRangeTombstoneIterator(atMost(0, timestamp, delTime), greaterThan(2, timestamp, delTime)); @@ -204,9 +195,6 @@ public class RowAndDeletionMergeIteratorTest assertRtMarker(iterator.next(), Bound.BOTTOM); assertTrue(iterator.hasNext()); - assertRow(iterator.next(), 0); - - assertTrue(iterator.hasNext()); assertRtMarker(iterator.next(), ClusteringPrefix.Kind.INCL_END_BOUND, 0); assertTrue(iterator.hasNext()); @@ -219,12 +207,6 @@ public class RowAndDeletionMergeIteratorTest assertRtMarker(iterator.next(), ClusteringPrefix.Kind.EXCL_START_BOUND, 2); assertTrue(iterator.hasNext()); - assertRow(iterator.next(), 3); - - assertTrue(iterator.hasNext()); - assertRow(iterator.next(), 4); - - assertTrue(iterator.hasNext()); assertRtMarker(iterator.next(), Bound.TOP); assertFalse(iterator.hasNext()); @@ -243,7 +225,7 @@ public class RowAndDeletionMergeIteratorTest Iterator<Row> rowIterator = createRowIterator(); int delTime = nowInSeconds + 1; - long timestamp = delTime * 1000; + long timestamp = toMillis(delTime); Iterator<RangeTombstone> rangeTombstoneIterator = createRangeTombstoneIterator(atMost(2, timestamp, delTime), greaterThan(2, timestamp, delTime)); @@ -254,22 +236,32 @@ public class RowAndDeletionMergeIteratorTest assertRtMarker(iterator.next(), Bound.BOTTOM); assertTrue(iterator.hasNext()); - assertRow(iterator.next(), 0); + assertRtMarker(iterator.next(), ClusteringPrefix.Kind.INCL_END_EXCL_START_BOUNDARY, 2); assertTrue(iterator.hasNext()); - assertRow(iterator.next(), 1); + assertRtMarker(iterator.next(), Bound.TOP); - assertTrue(iterator.hasNext()); - assertRow(iterator.next(), 2); + assertFalse(iterator.hasNext()); + } - assertTrue(iterator.hasNext()); - assertRtMarker(iterator.next(), ClusteringPrefix.Kind.INCL_END_EXCL_START_BOUNDARY, 2); + @Test + public void testWithExcludingEndIncludingStartMarker() + { + Iterator<Row> rowIterator = createRowIterator(); + + int delTime = nowInSeconds + 1; + long timestamp = toMillis(delTime); + + Iterator<RangeTombstone> rangeTombstoneIterator = createRangeTombstoneIterator(lessThan(2, timestamp, delTime), + atLeast(2, timestamp, delTime)); + + UnfilteredRowIterator iterator = createMergeIterator(rowIterator, rangeTombstoneIterator, false); assertTrue(iterator.hasNext()); - assertRow(iterator.next(), 3); + assertRtMarker(iterator.next(), Bound.BOTTOM); assertTrue(iterator.hasNext()); - assertRow(iterator.next(), 4); + assertRtMarker(iterator.next(), ClusteringPrefix.Kind.EXCL_END_INCL_START_BOUNDARY, 2); assertTrue(iterator.hasNext()); assertRtMarker(iterator.next(), Bound.TOP); @@ -278,15 +270,11 @@ public class RowAndDeletionMergeIteratorTest } @Test - public void testWithExcludingEndIncludingStartMarker() + public void testNonShadowingTombstone() { Iterator<Row> rowIterator = createRowIterator(); - int delTime = nowInSeconds + 1; - long timestamp = delTime * 1000; - - Iterator<RangeTombstone> rangeTombstoneIterator = createRangeTombstoneIterator(lessThan(2, timestamp, delTime), - atLeast(2, timestamp, delTime)); + Iterator<RangeTombstone> rangeTombstoneIterator = createRangeTombstoneIterator(atMost(0, -1L, 0)); UnfilteredRowIterator iterator = createMergeIterator(rowIterator, rangeTombstoneIterator, false); @@ -297,10 +285,10 @@ public class RowAndDeletionMergeIteratorTest assertRow(iterator.next(), 0); assertTrue(iterator.hasNext()); - assertRow(iterator.next(), 1); + assertRtMarker(iterator.next(), ClusteringPrefix.Kind.INCL_END_BOUND, 0); assertTrue(iterator.hasNext()); - assertRtMarker(iterator.next(), ClusteringPrefix.Kind.EXCL_END_INCL_START_BOUNDARY, 2); + assertRow(iterator.next(), 1); assertTrue(iterator.hasNext()); assertRow(iterator.next(), 2); @@ -311,12 +299,32 @@ public class RowAndDeletionMergeIteratorTest assertTrue(iterator.hasNext()); assertRow(iterator.next(), 4); - assertTrue(iterator.hasNext()); - assertRtMarker(iterator.next(), Bound.TOP); + assertFalse(iterator.hasNext()); + } + + @Test + public void testWithPartitionLevelTombstone() + { + Iterator<Row> rowIterator = createRowIterator(); + + int delTime = nowInSeconds - 1; + long timestamp = toMillis(delTime); + + Iterator<RangeTombstone> rangeTombstoneIterator = createRangeTombstoneIterator(atMost(0, timestamp, delTime), + greaterThan(2, timestamp, delTime)); + + int partitionDelTime = nowInSeconds + 1; + long partitionTimestamp = toMillis(partitionDelTime); + + UnfilteredRowIterator iterator = createMergeIterator(rowIterator, + rangeTombstoneIterator, + new DeletionTime(partitionTimestamp, partitionDelTime), + false); assertFalse(iterator.hasNext()); } + private void assertRtMarker(Unfiltered unfiltered, Bound bound) { assertEquals(Unfiltered.Kind.RANGE_TOMBSTONE_MARKER, unfiltered.kind()); @@ -350,9 +358,17 @@ public class RowAndDeletionMergeIteratorTest private UnfilteredRowIterator createMergeIterator(Iterator<Row> rows, Iterator<RangeTombstone> tombstones, boolean reversed) { + return createMergeIterator(rows, tombstones, DeletionTime.LIVE, reversed); + } + + private UnfilteredRowIterator createMergeIterator(Iterator<Row> rows, + Iterator<RangeTombstone> tombstones, + DeletionTime deletionTime, + boolean reversed) + { return new RowAndDeletionMergeIterator(cfm, Util.dk("k"), - DeletionTime.LIVE, + deletionTime, ColumnFilter.all(cfm), Rows.EMPTY_STATIC_ROW, reversed, @@ -404,4 +420,9 @@ public class RowAndDeletionMergeIteratorTest { return ByteBufferUtil.bytes(i); } + + private long toMillis(int timeInSeconds) + { + return timeInSeconds * 1000L; + } }
