Repository: cassandra Updated Branches: refs/heads/cassandra-2.0 0e98f5bd4 -> 133cfd399
Skip range calculations for range slices on LocalStrategy keyspaces Patch by Tyler Hobbs; reviewed by Jonathan Ellis for CASSANDRA-6906 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/133cfd39 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/133cfd39 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/133cfd39 Branch: refs/heads/cassandra-2.0 Commit: 133cfd399e15a2061f4759188726e875e288e625 Parents: 0e98f5b Author: Tyler Hobbs <ty...@datastax.com> Authored: Wed Apr 2 15:26:24 2014 -0500 Committer: Tyler Hobbs <ty...@datastax.com> Committed: Wed Apr 2 15:26:24 2014 -0500 ---------------------------------------------------------------------- CHANGES.txt | 2 ++ .../org/apache/cassandra/service/StorageProxy.java | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/133cfd39/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 9003309..2f3ff42 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -44,6 +44,8 @@ * Fix bad skip of sstables on slice query with composite start/finish (CASSANDRA-6825) * Fix unintended update with conditional statement (CASSANDRA-6893) * Fix map element access in IF (CASSANDRA-6914) + * Avoid costly range calculations for range queries on system keyspaces + (CASSANDRA-6906) Merged from 1.2: * Add UNLOGGED, COUNTER options to BATCH documentation (CASSANDRA-6816) * add extra SSL cipher suites (CASSANDRA-6613) http://git-wip-us.apache.org/repos/asf/cassandra/blob/133cfd39/src/java/org/apache/cassandra/service/StorageProxy.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java index 12f9ece..5a8dc8d 100644 --- a/src/java/org/apache/cassandra/service/StorageProxy.java +++ b/src/java/org/apache/cassandra/service/StorageProxy.java @@ -54,6 +54,7 @@ import org.apache.cassandra.gms.Gossiper; import org.apache.cassandra.io.util.DataOutputBuffer; import org.apache.cassandra.locator.AbstractReplicationStrategy; import org.apache.cassandra.locator.IEndpointSnitch; +import org.apache.cassandra.locator.LocalStrategy; import org.apache.cassandra.locator.TokenMetadata; import org.apache.cassandra.metrics.ClientRequestMetrics; import org.apache.cassandra.metrics.ReadRepairMetrics; @@ -1412,8 +1413,16 @@ public class StorageProxy implements StorageProxyMBean try { int cql3RowCount = 0; - rows = new ArrayList<Row>(); - List<AbstractBounds<RowPosition>> ranges = getRestrictedRanges(command.keyRange); + rows = new ArrayList<>(); + + // when dealing with LocalStrategy keyspaces, we can skip the range splitting and merging (which can be + // expensive in clusters with vnodes) + List<? extends AbstractBounds<RowPosition>> ranges; + if (keyspace.getReplicationStrategy() instanceof LocalStrategy) + ranges = command.keyRange.unwrap(); + else + ranges = getRestrictedRanges(command.keyRange); + int i = 0; AbstractBounds<RowPosition> nextRange = null; List<InetAddress> nextEndpoints = null;