add asserts for intervaltree creation
patch by Paul Cannon; reviewed by jbellis for CASSANDRA-4078


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

Branch: refs/heads/cassandra-1.1
Commit: 68dc7d0e393b587fd93d4efa0dbb55e74fe71981
Parents: 1b79d81
Author: Jonathan Ellis <jbel...@apache.org>
Authored: Mon Apr 2 16:36:14 2012 -0500
Committer: Jonathan Ellis <jbel...@apache.org>
Committed: Mon Apr 2 16:36:14 2012 -0500

----------------------------------------------------------------------
 .../apache/cassandra/io/sstable/SSTableReader.java |    1 +
 .../apache/cassandra/io/sstable/SSTableWriter.java |   17 +++++---------
 .../cassandra/utils/IntervalTree/IntervalNode.java |    6 +++++
 3 files changed, 13 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/68dc7d0e/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java 
b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
index 8c0719e..b4fed4a 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
@@ -409,6 +409,7 @@ public class SSTableReader extends SSTable
         }
         this.first = getMinimalKey(left);
         this.last = getMinimalKey(right);
+        assert this.first.compareTo(this.last) <= 0: String.format("SSTable 
first key %s > last key %s", this.first, this.last);
 
         // finalize the state of the reader
         ifile = 
ibuilder.complete(descriptor.filenameFor(Component.PRIMARY_INDEX));

http://git-wip-us.apache.org/repos/asf/cassandra/blob/68dc7d0e/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java 
b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
index 5e99241..b1fcc79 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
@@ -123,19 +123,14 @@ public class SSTableWriter extends SSTable
         }
     }
 
+    /**
+     * Perform sanity checks on @param decoratedKey and @return the position 
in the data file before any data is written
+     */
     private long beforeAppend(DecoratedKey<?> decoratedKey) throws IOException
     {
-        if (decoratedKey == null)
-        {
-            throw new IOException("Keys must not be null.");
-        }
-        if (lastWrittenKey != null && lastWrittenKey.compareTo(decoratedKey) > 
0)
-        {
-            logger.info("Last written key : " + lastWrittenKey);
-            logger.info("Current key : " + decoratedKey);
-            logger.info("Writing into file " + getFilename());
-            throw new IOException("Keys must be written in ascending order.");
-        }
+        assert decoratedKey != null : "Keys must not be null";
+        assert lastWrittenKey == null || 
lastWrittenKey.compareTo(decoratedKey) < 0
+               : "Last written key " + lastWrittenKey + " >= current key " + 
decoratedKey + " writing into " + getFilename();
         return (lastWrittenKey == null) ? 0 : dataFile.getFilePointer();
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/68dc7d0e/src/java/org/apache/cassandra/utils/IntervalTree/IntervalNode.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/IntervalTree/IntervalNode.java 
b/src/java/org/apache/cassandra/utils/IntervalTree/IntervalNode.java
index 38c4328..3b87134 100644
--- a/src/java/org/apache/cassandra/utils/IntervalTree/IntervalNode.java
+++ b/src/java/org/apache/cassandra/utils/IntervalTree/IntervalNode.java
@@ -53,6 +53,11 @@ public class IntervalNode
             //if i.max < v_pt then it goes to the left subtree
             List<Interval> leftSegment = getLeftIntervals(toBisect);
             List<Interval> rightSegment = getRightIntervals(toBisect);
+            assert (intersects.size() + leftSegment.size() + 
rightSegment.size()) == toBisect.size() :
+                    "intersects (" + String.valueOf(intersects.size()) +
+                    ") + leftSegment (" + String.valueOf(leftSegment.size()) +
+                    ") + rightSegment (" + String.valueOf(rightSegment.size()) 
+
+                    ") != toBisect (" + String.valueOf(toBisect.size()) + ")";
             if (leftSegment.size() > 0)
                 this.left = new IntervalNode(leftSegment);
             if (rightSegment.size() > 0)
@@ -102,6 +107,7 @@ public class IntervalNode
 
             for (Interval interval : intervals)
             {
+                assert interval.min.compareTo(interval.max) <= 0 : "Interval 
min > max";
                 allEndpoints.add(interval.min);
                 allEndpoints.add(interval.max);
             }

Reply via email to