Fix 2i page size calculation when there are no regular columns

patch by Andrés de la Peña; reviewed by Benjamin Lerer for CASSANDRA-13400


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

Branch: refs/heads/cassandra-3.11
Commit: 828ca7cc925de90c3883e935c66f7beec6fa9113
Parents: 462b9cf
Author: Andrés de la Peña <a.penya.gar...@gmail.com>
Authored: Tue Apr 4 14:23:19 2017 +0200
Committer: Benjamin Lerer <b.le...@gmail.com>
Committed: Tue Apr 4 14:23:19 2017 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/index/SecondaryIndexManager.java  |  2 +-
 .../index/internal/CassandraIndexTest.java      | 29 ++++++++++++++++++++
 3 files changed, 31 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/828ca7cc/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 4126b07..c258203 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.0.13
+ * Fix 2i page size calculation when there are no regular columns 
(CASSANDRA-13400)
  * Fix the conversion of 2.X expired rows without regular column data 
(CASSANDRA-13395)
  * Fix hint delivery when using ext+internal IPs with prefer_local enabled 
(CASSANDRA-13020)
  * Fix possible NPE on upgrade to 3.0/3.X in case of IO errors 
(CASSANDRA-13389)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/828ca7cc/src/java/org/apache/cassandra/index/SecondaryIndexManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/index/SecondaryIndexManager.java 
b/src/java/org/apache/cassandra/index/SecondaryIndexManager.java
index d39b607..dd6dde4 100644
--- a/src/java/org/apache/cassandra/index/SecondaryIndexManager.java
+++ b/src/java/org/apache/cassandra/index/SecondaryIndexManager.java
@@ -623,7 +623,7 @@ public class SecondaryIndexManager implements IndexRegistry
             return DEFAULT_PAGE_SIZE;
 
         int columnsPerRow = 
baseCfs.metadata.partitionColumns().regulars.size();
-        if (meanCellsPerPartition <= 0)
+        if (columnsPerRow <= 0)
             return DEFAULT_PAGE_SIZE;
 
         int meanRowsPerPartition = meanCellsPerPartition / columnsPerRow;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/828ca7cc/test/unit/org/apache/cassandra/index/internal/CassandraIndexTest.java
----------------------------------------------------------------------
diff --git 
a/test/unit/org/apache/cassandra/index/internal/CassandraIndexTest.java 
b/test/unit/org/apache/cassandra/index/internal/CassandraIndexTest.java
index 937512d..6c309ac 100644
--- a/test/unit/org/apache/cassandra/index/internal/CassandraIndexTest.java
+++ b/test/unit/org/apache/cassandra/index/internal/CassandraIndexTest.java
@@ -47,6 +47,7 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 /**
@@ -357,6 +358,34 @@ public class CassandraIndexTest extends CQLTester
     }
 
     @Test
+    public void indexOnClusteringColumnWithoutRegularColumns() throws Throwable
+    {
+        Object[] row1 = row("k0", "c0");
+        Object[] row2 = row("k0", "c1");
+        Object[] row3 = row("k1", "c0");
+        Object[] row4 = row("k1", "c1");
+        String tableName = createTable("CREATE TABLE %s (k text, c text, 
PRIMARY KEY(k, c))");
+        createIndex("CREATE INDEX no_regulars_idx ON %s(c)");
+
+        execute("INSERT INTO %s (k, c) VALUES (?, ?)", row1);
+        execute("INSERT INTO %s (k, c) VALUES (?, ?)", row2);
+        execute("INSERT INTO %s (k, c) VALUES (?, ?)", row3);
+        execute("INSERT INTO %s (k, c) VALUES (?, ?)", row4);
+
+        assertRowsIgnoringOrder(execute("SELECT * FROM %s WHERE c = ?", "c0"), 
row1, row3);
+        assertRowsIgnoringOrder(execute("SELECT * FROM %s WHERE c = ?", "c1"), 
row2, row4);
+        assertEmpty(execute("SELECT * FROM %s WHERE c = ?", "c3"));
+
+        dropIndex("DROP INDEX %s.no_regulars_idx");
+        createIndex("CREATE INDEX no_regulars_idx ON %s(c)");
+        assertTrue(waitForIndex(keyspace(), tableName, "no_regulars_idx"));
+
+        assertRowsIgnoringOrder(execute("SELECT * FROM %s WHERE c = ?", "c0"), 
row1, row3);
+        assertRowsIgnoringOrder(execute("SELECT * FROM %s WHERE c = ?", "c1"), 
row2, row4);
+        assertEmpty(execute("SELECT * FROM %s WHERE c = ?", "c3"));
+    }
+
+    @Test
     public void createIndexesOnMultipleMapDimensions() throws Throwable
     {
         Object[] row1 = row(0, 0, ImmutableMap.of("a", 10, "b", 20, "c", 30));

Reply via email to