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 2011/06/29 21:45:28 UTC
svn commit: r1141217 - in /cassandra/branches/cassandra-0.7: CHANGES.txt
src/java/org/apache/cassandra/service/AntiEntropyService.java
Author: slebresne
Date: Wed Jun 29 19:45:27 2011
New Revision: 1141217
URL: http://svn.apache.org/viewvc?rev=1141217&view=rev
Log:
Always use even distribution for merkle tree with RandomPartitionner
patch by slebresne; reviewed by jbellis for CASSANDRA-2841
Modified:
cassandra/branches/cassandra-0.7/CHANGES.txt
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/AntiEntropyService.java
Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1141217&r1=1141216&r2=1141217&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Wed Jun 29 19:45:27 2011
@@ -27,6 +27,8 @@
exception encountered after close() (CASSANDRA-2755)
* fix CLI parsing of read_repair_chance (CASSANDRA-2837)
* fix scan wrongly throwing assertion error (CASSANDRA-2653)
+ * Always use even distribution for merkle tree with RandomPartitionner
+ (CASSANDRA-2841)
0.7.6
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/AntiEntropyService.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/AntiEntropyService.java?rev=1141217&r1=1141216&r2=1141217&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/AntiEntropyService.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/AntiEntropyService.java Wed Jun 29 19:45:27 2011
@@ -37,6 +37,7 @@ import org.apache.cassandra.db.ColumnFam
import org.apache.cassandra.db.CompactionManager;
import org.apache.cassandra.db.DecoratedKey;
import org.apache.cassandra.db.Table;
+import org.apache.cassandra.dht.RandomPartitioner;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.dht.Token;
import org.apache.cassandra.gms.FailureDetector;
@@ -297,25 +298,33 @@ public class AntiEntropyService
public void prepare(ColumnFamilyStore cfs)
{
- List<DecoratedKey> keys = new ArrayList<DecoratedKey>();
- for (DecoratedKey sample : cfs.allKeySamples())
- keys.add(sample);
-
- if (keys.isEmpty())
+ if (tree.partitioner() instanceof RandomPartitioner)
{
- // use an even tree distribution
+ // You can't beat an even tree distribution for md5
tree.init();
}
else
{
- int numkeys = keys.size();
- Random random = new Random();
- // sample the column family using random keys from the index
- while (true)
+ List<DecoratedKey> keys = new ArrayList<DecoratedKey>();
+ for (DecoratedKey sample : cfs.allKeySamples())
+ keys.add(sample);
+
+ if (keys.isEmpty())
+ {
+ // use an even tree distribution
+ tree.init();
+ }
+ else
{
- DecoratedKey dk = keys.get(random.nextInt(numkeys));
- if (!tree.split(dk.token))
- break;
+ int numkeys = keys.size();
+ Random random = new Random();
+ // sample the column family using random keys from the index
+ while (true)
+ {
+ DecoratedKey dk = keys.get(random.nextInt(numkeys));
+ if (!tree.split(dk.token))
+ break;
+ }
}
}
logger.debug("Prepared AEService tree of size " + tree.size() + " for " + request);