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/13 18:14:07 UTC

[6/9] git commit: Avoid using row cache on 2i CFs patch by Sam Tunnicliffe and jbellis for CASSANDRA-5732

Avoid using row cache on 2i CFs
patch by Sam Tunnicliffe and jbellis for CASSANDRA-5732


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

Branch: refs/heads/trunk
Commit: 7290abd198d6c63f1109094cf237d9c84f617f7d
Parents: dc2dd52
Author: Jonathan Ellis <jb...@apache.org>
Authored: Thu Oct 10 14:45:46 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Sun Oct 13 11:09:25 2013 -0500

----------------------------------------------------------------------
 CHANGES.txt                                      |  1 +
 .../org/apache/cassandra/config/CFMetaData.java  | 10 ++++++++--
 .../apache/cassandra/db/ColumnFamilyStore.java   |  8 ++------
 .../AbstractSimplePerColumnSecondaryIndex.java   | 19 -------------------
 4 files changed, 11 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/7290abd1/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index afb1464..7f43031 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -22,6 +22,7 @@
  * Handle JMX notification failure for repair (CASSANDRA-6097)
  * (Hadoop) Fetch no more than 128 splits in parallel (CASSANDRA-6169)
  * stress: add username/password authentication support (CASSANDRA-6068)
+ * Fix indexed queries with row cache enabled on parent table (CASSANDRA-5732)
 
 
 1.2.10

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7290abd1/src/java/org/apache/cassandra/config/CFMetaData.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/CFMetaData.java b/src/java/org/apache/cassandra/config/CFMetaData.java
index 4355737..fcbd012 100644
--- a/src/java/org/apache/cassandra/config/CFMetaData.java
+++ b/src/java/org/apache/cassandra/config/CFMetaData.java
@@ -309,7 +309,13 @@ public final class CFMetaData
 
     CFMetaData(String keyspace, String name, ColumnFamilyType type, AbstractType<?> comp, AbstractType<?> subcc, UUID id)
     {
-        // Final fields must be set in constructor
+        assert keyspace != null;
+        assert name != null;
+        assert type != null;
+        assert id != null;
+        // (subcc may be null for non-supercolumns)
+        // (comp may also be null for custom indexes, which is kind of broken if you ask me)
+
         ksName = keyspace;
         cfName = name;
         cfType = type;
@@ -387,7 +393,7 @@ public final class CFMetaData
     public static CFMetaData newIndexMetadata(CFMetaData parent, ColumnDefinition info, AbstractType<?> columnComparator)
     {
         // Depends on parent's cache setting, turn on its index CF's cache.
-        // Here, only key cache is enabled, but later (in KeysIndex) row cache will be turned on depending on cardinality.
+        // Row caching is never enabled; see CASSANDRA-5732
         Caching indexCaching = parent.getCaching() == Caching.ALL || parent.getCaching() == Caching.KEYS_ONLY
                              ? Caching.KEYS_ONLY
                              : Caching.NONE;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7290abd1/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index a7e8605..39359b7 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -1190,12 +1190,8 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
         {
             if (isRowCacheEnabled())
             {
-                UUID cfId = Schema.instance.getId(table.name, columnFamily);
-                if (cfId == null)
-                {
-                    logger.trace("no id found for {}.{}", table.name, columnFamily);
-                    return null;
-                }
+                assert !isIndex(); // CASSANDRA-5732
+                UUID cfId = metadata.cfId;
 
                 ColumnFamily cached = getThroughCache(cfId, filter);
                 if (cached == null)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7290abd1/src/java/org/apache/cassandra/db/index/AbstractSimplePerColumnSecondaryIndex.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/index/AbstractSimplePerColumnSecondaryIndex.java b/src/java/org/apache/cassandra/db/index/AbstractSimplePerColumnSecondaryIndex.java
index 2ff2d27..caa7e20 100644
--- a/src/java/org/apache/cassandra/db/index/AbstractSimplePerColumnSecondaryIndex.java
+++ b/src/java/org/apache/cassandra/db/index/AbstractSimplePerColumnSecondaryIndex.java
@@ -49,25 +49,6 @@ public abstract class AbstractSimplePerColumnSecondaryIndex extends PerColumnSec
                                                              indexedCfMetadata.cfName,
                                                              new LocalPartitioner(columnDef.getValidator()),
                                                              indexedCfMetadata);
-
-        // enable and initialize row cache based on parent's setting and indexed column's cardinality
-        CFMetaData.Caching baseCaching = baseCfs.metadata.getCaching();
-        if (baseCaching == CFMetaData.Caching.ALL || baseCaching == CFMetaData.Caching.ROWS_ONLY)
-        {
-            /*
-             * # of index CF's key = cardinality of indexed column.
-             * if # of keys stored in index CF is more than average column counts (means tall table),
-             * then consider it as high cardinality.
-             */
-            double estimatedKeys = indexCfs.estimateKeys();
-            double averageColumnCount = indexCfs.getMeanColumns();
-            if (averageColumnCount > 0 && estimatedKeys / averageColumnCount > 1)
-            {
-                logger.debug("turning row cache on for " + indexCfs.getColumnFamilyName());
-                indexCfs.metadata.caching(baseCaching);
-                indexCfs.initRowCache();
-            }
-        }
     }
 
     protected abstract void init(ColumnDefinition columnDef);