Author: jbellis
Date: Wed Dec 29 23:38:56 2010
New Revision: 1053772

URL: http://svn.apache.org/viewvc?rev=1053772&view=rev
Log:
merge from 0.7

Modified:
    cassandra/trunk/   (props changed)
    cassandra/trunk/CHANGES.txt
    
cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/Session.java
    
cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/tests/Reader.java
    
cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/util/OperationThread.java
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
   (props changed)
    cassandra/trunk/src/java/org/apache/cassandra/dht/RandomPartitioner.java
    cassandra/trunk/test/unit/org/apache/cassandra/utils/MerkleTreeTest.java

Propchange: cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 29 23:38:56 2010
@@ -1,6 +1,6 @@
-/cassandra/branches/cassandra-0.6:922689-1052356,1052358-1053452,1053454,1053456-1053712
-/cassandra/branches/cassandra-0.7:1026516-1053714
-/cassandra/branches/cassandra-0.7.0:1053690-1053713
+/cassandra/branches/cassandra-0.6:922689-1052356,1052358-1053452,1053454,1053456-1053763
+/cassandra/branches/cassandra-0.7:1026516-1053765
+/cassandra/branches/cassandra-0.7.0:1053690-1053764
 /cassandra/tags/cassandra-0.7.0-rc3:1051699-1053689
 /incubator/cassandra/branches/cassandra-0.3:774578-796573
 /incubator/cassandra/branches/cassandra-0.4:810145-834239,834349-834350

Modified: cassandra/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1053772&r1=1053771&r2=1053772&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Wed Dec 29 23:38:56 2010
@@ -24,7 +24,8 @@
  * increased amount of index locks for faster commitlog replay
  * collect secondary index tombstones immediately (CASSANDRA-1914)
  * revert commitlog changes from #1780 (CASSANDRA-1917)
- * large row support for SSTableExport (CASSANDRA-1867)
+ * change RandomPartitioner min token to -1 to avoid collision w/
+   tokens on actual nodes (CASSANDRA-1901)
  * examine the right nibble when validating TimeUUID (CASSANDRA-1910)
 
 
@@ -48,6 +49,7 @@
    is requested (CASSANDRA-1866)
  * flush before repair (CASSANDRA-1748)
  * SSTableExport validates key order (CASSANDRA-1884)
+ * large row support for SSTableExport (CASSANDRA-1867)
  * Re-cache hot keys post-compaction without hitting disk (CASSANDRA-1878)
  * manage read repair in coordinator instead of data source, to
    provide latency information to dynamic snitch (CASSANDRA-1873)

Modified: 
cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/Session.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/Session.java?rev=1053772&r1=1053771&r2=1053772&view=diff
==============================================================================
--- 
cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/Session.java
 (original)
+++ 
cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/Session.java
 Wed Dec 29 23:38:56 2010
@@ -164,7 +164,7 @@ public class Session
                 columnFamilyType = 
ColumnFamilyType.valueOf(cmd.getOptionValue("y"));
 
             if (cmd.hasOption("k"))
-                ignoreErrors = Boolean.parseBoolean(cmd.getOptionValue("k"));
+                ignoreErrors = true;
 
             if (cmd.hasOption("i"))
                 progressInterval = Integer.parseInt(cmd.getOptionValue("i"));

Modified: 
cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/tests/Reader.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/tests/Reader.java?rev=1053772&r1=1053771&r2=1053772&view=diff
==============================================================================
--- 
cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/tests/Reader.java
 (original)
+++ 
cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/tests/Reader.java
 Wed Dec 29 23:38:56 2010
@@ -75,9 +75,12 @@ public class Reader extends OperationThr
                     List<ColumnOrSuperColumn> columns;
                     columns = client.get_slice(key, parent, predicate, 
session.getConsistencyLevel());
 
-                    if (columns == null)
+                    if (columns.size() == 0)
                     {
-                        throw new RuntimeException(String.format("Key %s not 
found.", superColumn));
+                        System.err.println(String.format("Key %s not found.", 
superColumn));
+
+                        if (!session.ignoreErrors())
+                            break;
                     }
                 }
                 catch (Exception e)
@@ -111,9 +114,12 @@ public class Reader extends OperationThr
                 List<ColumnOrSuperColumn> columns;
                 columns = client.get_slice(keyBuffer, parent, predicate, 
session.getConsistencyLevel());
 
-                if (columns == null)
+                if (columns.size() == 0)
                 {
-                    throw new RuntimeException(String.format("Key %s not 
found.", key.toString()));
+                    System.err.println(String.format("Key %s not found.", new 
String(key)));
+
+                    if (!session.ignoreErrors())
+                        break;
                 }
             }
             catch (Exception e)

Modified: 
cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/util/OperationThread.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/util/OperationThread.java?rev=1053772&r1=1053771&r2=1053772&view=diff
==============================================================================
--- 
cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/util/OperationThread.java
 (original)
+++ 
cassandra/trunk/contrib/stress/src/org/apache/cassandra/contrib/stress/util/OperationThread.java
 Wed Dec 29 23:38:56 2010
@@ -101,7 +101,7 @@ public abstract class OperationThread ex
      */
     private byte[] generateGaussKey()
     {
-        String format = "%0" + session.getTotalKeysLength() + "f";
+        String format = "%0" + session.getTotalKeysLength() + "d";
 
         for (;;)
         {
@@ -109,7 +109,7 @@ public abstract class OperationThread ex
 
             if (0 <= token && token < session.getNumKeys())
             {
-                return String.format(format, token).getBytes();
+                return String.format(format, (int) token).getBytes();
             }
         }
     }

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 29 23:38:56 2010
@@ -1,6 +1,6 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1052356,1052358-1053452,1053454,1053456-1053712
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1053714
-/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1053690-1053713
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1052356,1052358-1053452,1053454,1053456-1053763
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1053765
+/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1053690-1053764
 
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1051699-1053689
 
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-796573
 
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Cassandra.java:810145-834239,834349-834350

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 29 23:38:56 2010
@@ -1,6 +1,6 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1052356,1052358-1053452,1053454,1053456-1053712
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1053714
-/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1053690-1053713
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1052356,1052358-1053452,1053454,1053456-1053763
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1053765
+/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1053690-1053764
 
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1051699-1053689
 
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-792198
 
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Column.java:810145-834239,834349-834350

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 29 23:38:56 2010
@@ -1,6 +1,6 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1052356,1052358-1053452,1053454,1053456-1053712
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1053714
-/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1053690-1053713
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1052356,1052358-1053452,1053454,1053456-1053763
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1053765
+/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1053690-1053764
 
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1051699-1053689
 
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-796573
 
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:810145-834239,834349-834350

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 29 23:38:56 2010
@@ -1,6 +1,6 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1052356,1052358-1053452,1053454,1053456-1053712
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1053714
-/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1053690-1053713
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1052356,1052358-1053452,1053454,1053456-1053763
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1053765
+/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1053690-1053764
 
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1051699-1053689
 
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-796573
 
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:810145-834239,834349-834350

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 29 23:38:56 2010
@@ -1,6 +1,6 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1052356,1052358-1053452,1053454,1053456-1053712
-/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1053714
-/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1053690-1053713
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1052356,1052358-1053452,1053454,1053456-1053763
+/cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1053765
+/cassandra/branches/cassandra-0.7.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1053690-1053764
 
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1051699-1053689
 
/incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-792198
 
/incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:810145-834239,834349-834350

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/dht/RandomPartitioner.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/RandomPartitioner.java?rev=1053772&r1=1053771&r2=1053772&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/RandomPartitioner.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/RandomPartitioner.java 
Wed Dec 29 23:38:56 2010
@@ -35,9 +35,8 @@ import static com.google.common.base.Cha
  */
 public class RandomPartitioner implements IPartitioner<BigIntegerToken>
 {
-    public static final BigInteger TWO = new BigInteger("2");
-
-    public static final BigIntegerToken MINIMUM = new BigIntegerToken("0");
+    public static final BigInteger ZERO = new BigInteger("0");
+    public static final BigIntegerToken MINIMUM = new BigIntegerToken("-1");
 
     private static final byte DELIMITER_BYTE = ":".getBytes()[0];
 
@@ -68,7 +67,10 @@ public class RandomPartitioner implement
 
     public Token midpoint(Token ltoken, Token rtoken)
     {
-        Pair<BigInteger,Boolean> midpair = 
FBUtilities.midpoint(((BigIntegerToken)ltoken).token, 
((BigIntegerToken)rtoken).token, 127);
+        // the symbolic MINIMUM token should act as ZERO: the empty bit array
+        BigInteger left = ltoken.equals(MINIMUM) ? ZERO : 
((BigIntegerToken)ltoken).token;
+        BigInteger right = rtoken.equals(MINIMUM) ? ZERO : 
((BigIntegerToken)rtoken).token;
+        Pair<BigInteger,Boolean> midpair = FBUtilities.midpoint(left, right, 
127);
         // discard the remainder
         return new BigIntegerToken(midpair.left);
     }

Modified: 
cassandra/trunk/test/unit/org/apache/cassandra/utils/MerkleTreeTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/utils/MerkleTreeTest.java?rev=1053772&r1=1053771&r2=1053772&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/utils/MerkleTreeTest.java 
(original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/utils/MerkleTreeTest.java 
Wed Dec 29 23:38:56 2010
@@ -91,11 +91,13 @@ public class MerkleTreeTest
 
     /**
      * The value returned by this method is affected by TOKEN_SCALE: setting 
TOKEN_SCALE
-     * to 8 means that passing 0 through 8 for this method will return values 
mapped
-     * between 0 and Token.MAX_VALUE.
+     * to 8 means that passing -1 through 8 for this method will return values 
mapped
+     * between -1 and Token.MAX_VALUE.
      */
     public static BigIntegerToken tok(int i)
     {
+        if (i == -1)
+            return new BigIntegerToken(new BigInteger("-1"));
         BigInteger md5_max = new BigInteger("2").pow(127);
         BigInteger bint = md5_max.divide(TOKEN_SCALE).multiply(new 
BigInteger(""+i));
         return new BigIntegerToken(bint);
@@ -111,9 +113,9 @@ public class MerkleTreeTest
         mt.split(tok(7));
 
         assertEquals(4, mt.size());
-        assertEquals(new Range(tok(7), tok(0)), mt.get(tok(0)));
-        assertEquals(new Range(tok(0), tok(4)), mt.get(tok(3)));
-        assertEquals(new Range(tok(0), tok(4)), mt.get(tok(4)));
+        assertEquals(new Range(tok(7), tok(-1)), mt.get(tok(-1)));
+        assertEquals(new Range(tok(-1), tok(4)), mt.get(tok(3)));
+        assertEquals(new Range(tok(-1), tok(4)), mt.get(tok(4)));
         assertEquals(new Range(tok(4), tok(6)), mt.get(tok(6)));
         assertEquals(new Range(tok(6), tok(7)), mt.get(tok(7)));
 
@@ -121,7 +123,7 @@ public class MerkleTreeTest
         assertEquals((byte)1, mt.get(tok(4)).depth);
         assertEquals((byte)2, mt.get(tok(6)).depth);
         assertEquals((byte)3, mt.get(tok(7)).depth);
-        assertEquals((byte)3, mt.get(tok(0)).depth);
+        assertEquals((byte)3, mt.get(tok(-1)).depth);
 
         try
         {
@@ -146,8 +148,8 @@ public class MerkleTreeTest
         // should fail to split below hashdepth
         assertFalse(mt.split(tok(1)));
         assertEquals(3, mt.size());
-        assertEquals(new Range(tok(4), tok(0)), mt.get(tok(0)));
-        assertEquals(new Range(tok(0), tok(2)), mt.get(tok(2)));
+        assertEquals(new Range(tok(4), tok(-1)), mt.get(tok(-1)));
+        assertEquals(new Range(tok(-1), tok(2)), mt.get(tok(2)));
         assertEquals(new Range(tok(2), tok(4)), mt.get(tok(4)));
     }
 
@@ -162,8 +164,8 @@ public class MerkleTreeTest
         // should fail to split above maxsize
         assertFalse(mt.split(tok(2)));
         assertEquals(2, mt.size());
-        assertEquals(new Range(tok(4), tok(0)), mt.get(tok(0)));
-        assertEquals(new Range(tok(0), tok(4)), mt.get(tok(4)));
+        assertEquals(new Range(tok(4), tok(-1)), mt.get(tok(-1)));
+        assertEquals(new Range(tok(-1), tok(4)), mt.get(tok(4)));
     }
 
     @Test
@@ -182,46 +184,46 @@ public class MerkleTreeTest
         mt.compact(tok(1));
         mt.compact(tok(5));
         assertEquals(6, mt.size());
-        assertEquals(new Range(tok(0), tok(2)), mt.get(tok(2)));
+        assertEquals(new Range(tok(-1), tok(2)), mt.get(tok(2)));
         assertEquals(new Range(tok(2), tok(3)), mt.get(tok(3)));
         assertEquals(new Range(tok(3), tok(4)), mt.get(tok(4)));
         assertEquals(new Range(tok(4), tok(6)), mt.get(tok(5)));
         assertEquals(new Range(tok(6), tok(7)), mt.get(tok(7)));
-        assertEquals(new Range(tok(7), tok(0)), mt.get(tok(0)));
+        assertEquals(new Range(tok(7), tok(-1)), mt.get(tok(-1)));
         // compacted ranges should be at depth 2, and the rest at 3
         for (int i : new int[]{2,6}){ assertEquals((byte)2, 
mt.get(tok(i)).depth); }
-        for (int i : new int[]{3,4,7,0}){ assertEquals((byte)3, 
mt.get(tok(i)).depth); }
+        for (int i : new int[]{3,4,7,-1}){ assertEquals((byte)3, 
mt.get(tok(i)).depth); }
 
         // compact (two,four] and then (six,zero]
         mt.compact(tok(3));
         mt.compact(tok(7));
         assertEquals(4, mt.size());
-        assertEquals(new Range(tok(0), tok(2)), mt.get(tok(2)));
+        assertEquals(new Range(tok(-1), tok(2)), mt.get(tok(2)));
         assertEquals(new Range(tok(2), tok(4)), mt.get(tok(4)));
         assertEquals(new Range(tok(4), tok(6)), mt.get(tok(5)));
-        assertEquals(new Range(tok(6), tok(0)), mt.get(tok(0)));
-        for (int i : new int[]{2,4,5,0}){ assertEquals((byte)2, 
mt.get(tok(i)).depth); }
+        assertEquals(new Range(tok(6), tok(-1)), mt.get(tok(-1)));
+        for (int i : new int[]{2,4,5,-1}){ assertEquals((byte)2, 
mt.get(tok(i)).depth); }
 
         // compact (zero,four]
         mt.compact(tok(2));
         assertEquals(3, mt.size());
-        assertEquals(new Range(tok(0), tok(4)), mt.get(tok(2)));
+        assertEquals(new Range(tok(-1), tok(4)), mt.get(tok(2)));
         assertEquals(new Range(tok(4), tok(6)), mt.get(tok(6)));
-        assertEquals(new Range(tok(6), tok(0)), mt.get(tok(0)));
+        assertEquals(new Range(tok(6), tok(-1)), mt.get(tok(-1)));
 
         // compact (four, zero]
         mt.compact(tok(6));
         assertEquals(2, mt.size());
-        assertEquals(new Range(tok(0), tok(4)), mt.get(tok(2)));
-        assertEquals(new Range(tok(4), tok(0)), mt.get(tok(6)));
+        assertEquals(new Range(tok(-1), tok(4)), mt.get(tok(2)));
+        assertEquals(new Range(tok(4), tok(-1)), mt.get(tok(6)));
         assertEquals((byte)1, mt.get(tok(2)).depth);
         assertEquals((byte)1, mt.get(tok(6)).depth);
 
         // compact (zero, zero] (the root)
         mt.compact(tok(4));
         assertEquals(1, mt.size());
-        assertEquals(new Range(tok(0), tok(0)), mt.get(tok(0)));
-        assertEquals((byte)0, mt.get(tok(0)).depth);
+        assertEquals(new Range(tok(-1), tok(-1)), mt.get(tok(-1)));
+        assertEquals((byte)0, mt.get(tok(-1)).depth);
     }
 
     @Test
@@ -235,11 +237,11 @@ public class MerkleTreeTest
 
         // validate both ranges
         mt.get(tok(4)).hash(val);
-        mt.get(tok(0)).hash(val);
+        mt.get(tok(-1)).hash(val);
 
         // compact (zero, eight]
         mt.compact(tok(4));
-        assertHashEquals(valXval, mt.get(tok(0)).hash());
+        assertHashEquals(valXval, mt.get(tok(-1)).hash());
     }
 
     @Test
@@ -248,8 +250,8 @@ public class MerkleTreeTest
         Iterator<TreeRange> ranges;
         
         // (zero, zero]
-        ranges = mt.invalids(new Range(tok(0), tok(0)));
-        assertEquals(new Range(tok(0), tok(0)), ranges.next());
+        ranges = mt.invalids(new Range(tok(-1), tok(-1)));
+        assertEquals(new Range(tok(-1), tok(-1)), ranges.next());
         assertFalse(ranges.hasNext());
 
         // all invalid
@@ -258,33 +260,33 @@ public class MerkleTreeTest
         mt.split(tok(6));
         mt.split(tok(3));
         mt.split(tok(5));
-        ranges = mt.invalids(new Range(tok(0), tok(0)));
-        assertEquals(new Range(tok(0), tok(2)), ranges.next());
+        ranges = mt.invalids(new Range(tok(-1), tok(-1)));
+        assertEquals(new Range(tok(-1), tok(2)), ranges.next());
         assertEquals(new Range(tok(2), tok(3)), ranges.next());
         assertEquals(new Range(tok(3), tok(4)), ranges.next());
         assertEquals(new Range(tok(4), tok(5)), ranges.next());
         assertEquals(new Range(tok(5), tok(6)), ranges.next());
-        assertEquals(new Range(tok(6), tok(0)), ranges.next());
+        assertEquals(new Range(tok(6), tok(-1)), ranges.next());
         assertFalse(ranges.hasNext());
         
         // some invalid
         mt.get(tok(2)).hash("non-null!".getBytes());
         mt.get(tok(4)).hash("non-null!".getBytes());
         mt.get(tok(5)).hash("non-null!".getBytes());
-        mt.get(tok(0)).hash("non-null!".getBytes());
-        ranges = mt.invalids(new Range(tok(0), tok(0)));
+        mt.get(tok(-1)).hash("non-null!".getBytes());
+        ranges = mt.invalids(new Range(tok(-1), tok(-1)));
         assertEquals(new Range(tok(2), tok(3)), ranges.next());
         assertEquals(new Range(tok(5), tok(6)), ranges.next());
         assertFalse(ranges.hasNext());
         
         // some invalid in left subrange
-        ranges = mt.invalids(new Range(tok(0), tok(6)));
+        ranges = mt.invalids(new Range(tok(-1), tok(6)));
         assertEquals(new Range(tok(2), tok(3)), ranges.next());
         assertEquals(new Range(tok(5), tok(6)), ranges.next());
         assertFalse(ranges.hasNext());
 
         // some invalid in right subrange
-        ranges = mt.invalids(new Range(tok(2), tok(0)));
+        ranges = mt.invalids(new Range(tok(2), tok(-1)));
         assertEquals(new Range(tok(2), tok(3)), ranges.next());
         assertEquals(new Range(tok(5), tok(6)), ranges.next());
         assertFalse(ranges.hasNext());
@@ -294,13 +296,13 @@ public class MerkleTreeTest
     public void testHashFull()
     {
         byte[] val = DUMMY;
-        Range range = new Range(tok(0), tok(0));
+        Range range = new Range(tok(-1), tok(-1));
 
         // (zero, zero]
         assertNull(mt.hash(range));
         
         // validate the range
-        mt.get(tok(0)).hash(val);
+        mt.get(tok(-1)).hash(val);
         
         assertHashEquals(val, mt.hash(range));
     }
@@ -311,9 +313,9 @@ public class MerkleTreeTest
         byte[] val = DUMMY;
         byte[] leftval = hashed(val, 1, 1);
         byte[] partialval = hashed(val, 1);
-        Range left = new Range(tok(0), tok(4));
+        Range left = new Range(tok(-1), tok(4));
         Range partial = new Range(tok(2), tok(4));
-        Range right = new Range(tok(4), tok(0));
+        Range right = new Range(tok(4), tok(-1));
         Range linvalid = new Range(tok(1), tok(4));
         Range rinvalid = new Range(tok(4), tok(6));
 
@@ -329,7 +331,7 @@ public class MerkleTreeTest
         // validate the range
         mt.get(tok(2)).hash(val);
         mt.get(tok(4)).hash(val);
-        mt.get(tok(0)).hash(val);
+        mt.get(tok(-1)).hash(val);
         
         assertHashEquals(leftval, mt.hash(left));
         assertHashEquals(partialval, mt.hash(partial));
@@ -345,10 +347,10 @@ public class MerkleTreeTest
         byte[] lchildval = hashed(val, 3, 3, 2);
         byte[] rchildval = hashed(val, 2, 2);
         byte[] fullval = hashed(val, 3, 3, 2, 2, 2);
-        Range full = new Range(tok(0), tok(0));
-        Range lchild = new Range(tok(0), tok(4));
-        Range rchild = new Range(tok(4), tok(0));
-        Range invalid = new Range(tok(1), tok(0));
+        Range full = new Range(tok(-1), tok(-1));
+        Range lchild = new Range(tok(-1), tok(4));
+        Range rchild = new Range(tok(4), tok(-1));
+        Range invalid = new Range(tok(1), tok(-1));
 
         // (zero,one] (one, two] (two,four] (four, six] (six, zero]
         mt.split(tok(4));
@@ -365,7 +367,7 @@ public class MerkleTreeTest
         mt.get(tok(2)).hash(val);
         mt.get(tok(4)).hash(val);
         mt.get(tok(6)).hash(val);
-        mt.get(tok(0)).hash(val);
+        mt.get(tok(-1)).hash(val);
         
         assertHashEquals(fullval, mt.hash(full));
         assertHashEquals(lchildval, mt.hash(lchild));
@@ -381,9 +383,9 @@ public class MerkleTreeTest
         byte[] val = DUMMY;
         byte[] childfullval = hashed(val, 5, 5, 4);
         byte[] fullval = hashed(val, 5, 5, 4, 3, 2, 1);
-        Range childfull = new Range(tok(0), tok(4));
-        Range full = new Range(tok(0), tok(0));
-        Range invalid = new Range(tok(4), tok(0));
+        Range childfull = new Range(tok(-1), tok(4));
+        Range full = new Range(tok(-1), tok(-1));
+        Range invalid = new Range(tok(4), tok(-1));
 
         mt = new MerkleTree(partitioner, RECOMMENDED_DEPTH, Integer.MAX_VALUE);
         mt.split(tok(16));
@@ -401,7 +403,7 @@ public class MerkleTreeTest
         mt.get(tok(4)).hash(val);
         mt.get(tok(8)).hash(val);
         mt.get(tok(16)).hash(val);
-        mt.get(tok(0)).hash(val);
+        mt.get(tok(-1)).hash(val);
 
         assertHashEquals(fullval, mt.hash(full));
         assertHashEquals(childfullval, mt.hash(childfull));
@@ -423,11 +425,11 @@ public class MerkleTreeTest
         }
 
         // validate the tree
-        TreeRangeIterator ranges = mt.invalids(new Range(tok(0), tok(0)));
+        TreeRangeIterator ranges = mt.invalids(new Range(tok(-1), tok(-1)));
         for (TreeRange range : ranges)
             range.addHash(new RowHash(range.right, new byte[0]));
 
-        assert null != mt.hash(new Range(tok(0), tok(0))) :
+        assert null != mt.hash(new Range(tok(-1), tok(-1))) :
             "Could not hash tree " + mt;
     }
 
@@ -442,7 +444,7 @@ public class MerkleTreeTest
     {
         TOKEN_SCALE = new BigInteger("16"); // this test needs slightly more 
resolution
 
-        Range full = new Range(tok(0), tok(0));
+        Range full = new Range(tok(-1), tok(-1));
         Iterator<TreeRange> ranges;
         MerkleTree mt2 = new MerkleTree(partitioner, RECOMMENDED_DEPTH, 
Integer.MAX_VALUE);
 
@@ -453,12 +455,12 @@ public class MerkleTreeTest
         mt.split(tok(10));
         
         ranges = mt.invalids(full);
-        ranges.next().addAll(new HIterator(2, 4)); // (0,4]: depth 2
+        ranges.next().addAll(new HIterator(2, 4)); // (-1,4]: depth 2
         ranges.next().addAll(new HIterator(6)); // (4,6]
         ranges.next().addAll(new HIterator(8)); // (6,8]
         ranges.next().addAll(new HIterator(/*empty*/ new int[0])); // (8,10]
         ranges.next().addAll(new HIterator(12)); // (10,12]
-        ranges.next().addAll(new HIterator(14, 0)); // (12,0]: depth 2
+        ranges.next().addAll(new HIterator(14, -1)); // (12,-1]: depth 2
 
 
         mt2.split(tok(8));
@@ -470,14 +472,14 @@ public class MerkleTreeTest
         mt2.split(tok(11));
 
         ranges = mt2.invalids(full);
-        ranges.next().addAll(new HIterator(2)); // (0,2]
+        ranges.next().addAll(new HIterator(2)); // (-1,2]
         ranges.next().addAll(new HIterator(4)); // (2,4]
         ranges.next().addAll(new HIterator(6, 8)); // (4,8]: depth 2
         ranges.next().addAll(new HIterator(/*empty*/ new int[0])); // (8,9]
         ranges.next().addAll(new HIterator(/*empty*/ new int[0])); // (9,10]
         ranges.next().addAll(new HIterator(/*empty*/ new int[0])); // (10,11]: 
depth 4
         ranges.next().addAll(new HIterator(12)); // (11,12]: depth 4
-        ranges.next().addAll(new HIterator(14, 0)); // (12,0]: depth 2
+        ranges.next().addAll(new HIterator(14, -1)); // (12,-1]: depth 2
 
         byte[] mthash = mt.hash(full);
         byte[] mt2hash = mt2.hash(full);
@@ -487,7 +489,7 @@ public class MerkleTreeTest
     @Test
     public void testSerialization() throws Exception
     {
-        Range full = new Range(tok(0), tok(0));
+        Range full = new Range(tok(-1), tok(-1));
         ByteArrayOutputStream bout = new ByteArrayOutputStream();
         ObjectOutputStream oout = new ObjectOutputStream(bout);
     
@@ -514,7 +516,7 @@ public class MerkleTreeTest
     @Test
     public void testDifference()
     {
-        Range full = new Range(tok(0), tok(0));
+        Range full = new Range(tok(-1), tok(-1));
         int maxsize = 16;
         mt.maxsize(maxsize);
         MerkleTree mt2 = new MerkleTree(partitioner, RECOMMENDED_DEPTH, 
maxsize);


Reply via email to