You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2013/10/08 18:17:18 UTC

[2/6] git commit: Trace index selection patch by Lyuben Todorov and jbellis for CASSANDRA-6001

Trace index selection
patch by Lyuben Todorov and jbellis for CASSANDRA-6001


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/241c70a3
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/241c70a3
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/241c70a3

Branch: refs/heads/cassandra-2.0
Commit: 241c70a37a89334657c9983736b35db0611fb874
Parents: fe56518
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Oct 8 09:52:42 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Oct 8 10:00:25 2013 -0500

----------------------------------------------------------------------
 CHANGES.txt                                         |  1 +
 .../db/index/composites/CompositesSearcher.java     | 16 ++++++++++++++--
 .../cassandra/db/index/keys/KeysSearcher.java       | 16 ++++++++++++++--
 3 files changed, 29 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/241c70a3/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 35bd832..adbae91 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -15,6 +15,7 @@
  * Fix skipping columns with multiple slices (CASSANDRA-6119)
  * Expose connected thrift + native client counts (CASSANDRA-5084)
  * Optimize auth setup (CASSANDRA-6122)
+ * Trace index selection (CASSANDRA-6001)
 
 
 1.2.10

http://git-wip-us.apache.org/repos/asf/cassandra/blob/241c70a3/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java b/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
index 1e9d59d..82e227f 100644
--- a/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
@@ -36,7 +36,9 @@ import org.apache.cassandra.dht.AbstractBounds;
 import org.apache.cassandra.dht.Range;
 import org.apache.cassandra.thrift.IndexExpression;
 import org.apache.cassandra.thrift.IndexOperator;
+import org.apache.cassandra.tracing.Tracing;
 import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.FBUtilities;
 
 public class CompositesSearcher extends SecondaryIndexSearcher
 {
@@ -54,22 +56,32 @@ public class CompositesSearcher extends SecondaryIndexSearcher
     {
         IndexExpression best = null;
         int bestMeanCount = Integer.MAX_VALUE;
+        Map<SecondaryIndex, Integer> candidates = new HashMap<>();
+
         for (IndexExpression expression : clause)
         {
-            //skip columns belonging to a different index type
-            if(!columns.contains(expression.column_name))
+            // skip columns belonging to a different index type
+            if (!columns.contains(expression.column_name))
                 continue;
 
             SecondaryIndex index = indexManager.getIndexForColumn(expression.column_name);
             if (index == null || (expression.op != IndexOperator.EQ))
                 continue;
             int columns = index.getIndexCfs().getMeanColumns();
+            candidates.put(index, columns);
             if (columns < bestMeanCount)
             {
                 best = expression;
                 bestMeanCount = columns;
             }
         }
+
+        if (best == null)
+            Tracing.trace("No applicable indexes found");
+        else
+            Tracing.trace("Candidate index mean cardinalities are {}. Scanning with {}.",
+                          FBUtilities.toString(candidates), indexManager.getIndexForColumn(best.column_name).getIndexName());
+
         return best;
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/241c70a3/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
index 4be7988..7d23e6c 100644
--- a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
@@ -32,7 +32,9 @@ import org.apache.cassandra.dht.AbstractBounds;
 import org.apache.cassandra.dht.Range;
 import org.apache.cassandra.thrift.IndexExpression;
 import org.apache.cassandra.thrift.IndexOperator;
+import org.apache.cassandra.tracing.Tracing;
 import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.FBUtilities;
 import org.apache.cassandra.utils.HeapAllocator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -50,22 +52,32 @@ public class KeysSearcher extends SecondaryIndexSearcher
     {
         IndexExpression best = null;
         int bestMeanCount = Integer.MAX_VALUE;
+        Map<SecondaryIndex, Integer> candidates = new HashMap<>();
+
         for (IndexExpression expression : clause)
         {
-            //skip columns belonging to a different index type
-            if(!columns.contains(expression.column_name))
+            // skip columns belonging to a different index type
+            if (!columns.contains(expression.column_name))
                 continue;
 
             SecondaryIndex index = indexManager.getIndexForColumn(expression.column_name);
             if (index == null || (expression.op != IndexOperator.EQ))
                 continue;
             int columns = index.getIndexCfs().getMeanColumns();
+            candidates.put(index, columns);
             if (columns < bestMeanCount)
             {
                 best = expression;
                 bestMeanCount = columns;
             }
         }
+
+        if (best == null)
+            Tracing.trace("No applicable indexes found");
+        else
+            Tracing.trace("Candidate index mean cardinalities are {}. Scanning with {}.",
+                          FBUtilities.toString(candidates), indexManager.getIndexForColumn(best.column_name).getIndexName());
+
         return best;
     }