Author: slebresne Date: Wed Jun 15 11:55:28 2011 New Revision: 1136006 URL: http://svn.apache.org/viewvc?rev=1136006&view=rev Log: Avoids infinite loop when initializing a merkle tree patch by slebresne; reviewed by stuhood for CASSANDRA-2758
Modified: cassandra/branches/cassandra-0.8/CHANGES.txt cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/utils/MerkleTree.java Modified: cassandra/branches/cassandra-0.8/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/CHANGES.txt?rev=1136006&r1=1136005&r2=1136006&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/CHANGES.txt (original) +++ cassandra/branches/cassandra-0.8/CHANGES.txt Wed Jun 15 11:55:28 2011 @@ -56,6 +56,7 @@ * fix ConcurrentModificationException in repair when dealing with 0.7 node (CASSANDRA-2767) * use threadsafe collections for StreamInSession (CASSANDRA-2766) + * avoid infinite loop when creating merkle tree (CASSANDRA-2758) 0.8.0-final Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/utils/MerkleTree.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/utils/MerkleTree.java?rev=1136006&r1=1136005&r2=1136006&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/utils/MerkleTree.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/utils/MerkleTree.java Wed Jun 15 11:55:28 2011 @@ -178,8 +178,11 @@ public class MerkleTree implements Seria return new Leaf(); Token midpoint = partitioner.midpoint(left, right); - Hashable lchild = midpoint.equals(left) ? new Leaf() : initHelper(left, midpoint, inc(depth), max); - Hashable rchild = midpoint.equals(right) ? new Leaf() : initHelper(midpoint, right, inc(depth), max); + if (midpoint.equals(left) || midpoint.equals(right)) + return new Leaf(); + + Hashable lchild = initHelper(left, midpoint, inc(depth), max); + Hashable rchild = initHelper(midpoint, right, inc(depth), max); return new Inner(midpoint, lchild, rchild); }