You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ty...@apache.org on 2014/04/02 22:28:55 UTC
git commit: Skip range calculations for range slices on LocalStrategy
keyspaces
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;