You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by bl...@apache.org on 2017/06/26 11:32:47 UTC

[4/6] cassandra git commit: Merge branch cassandra-3.0 into cassandra-3.11

Merge branch cassandra-3.0 into cassandra-3.11


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

Branch: refs/heads/trunk
Commit: eaa3da1d1290d3f909103442d88d2e390a86cf86
Parents: 56c8f0c 57c590f
Author: Benjamin Lerer <b....@gmail.com>
Authored: Mon Jun 26 13:24:33 2017 +0200
Committer: Benjamin Lerer <b....@gmail.com>
Committed: Mon Jun 26 13:24:33 2017 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/cql3/selection/Selection.java     |  2 +-
 .../validation/entities/SecondaryIndexTest.java | 43 ++++++++++++++++++++
 3 files changed, 45 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/eaa3da1d/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 6f2d509,d90d220..4297a15
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,5 -1,5 +1,6 @@@
 -3.0.15
 +3.11.1
 +Merged from 3.0:
+  * Fix secondary index queries on COMPACT tables (CASSANDRA-13627)
   * Nodetool listsnapshots output is missing a newline, if there are no snapshots (CASSANDRA-13568)
  
  

http://git-wip-us.apache.org/repos/asf/cassandra/blob/eaa3da1d/src/java/org/apache/cassandra/cql3/selection/Selection.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/eaa3da1d/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java
index 3aed07a,0f6cba7..bda0166
--- a/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java
@@@ -1577,53 -1274,46 +1577,96 @@@ public class SecondaryIndexTest extend
          assertEmpty(execute("SELECT * FROM %s WHERE a = 5"));
      }
  
+     @Test
+     public void testIndicesOnCompactTable() throws Throwable
+     {
+         assertInvalidMessage("COMPACT STORAGE with composite PRIMARY KEY allows no more than one column not part of the PRIMARY KEY (got: v1, v2)",
+                              "CREATE TABLE test (pk int, c int, v1 int, v2 int, PRIMARY KEY(pk, c)) WITH COMPACT STORAGE");
+ 
+         createTable("CREATE TABLE %s (pk int, c int, v int, PRIMARY KEY(pk, c)) WITH COMPACT STORAGE");
+         assertInvalidMessage("Secondary indexes are not supported on COMPACT STORAGE tables that have clustering columns",
+                              "CREATE INDEX ON %s(v)");
+ 
+         createTable("CREATE TABLE %s (pk int PRIMARY KEY, v int) WITH COMPACT STORAGE");
+         createIndex("CREATE INDEX ON %s(v)");
+ 
+         execute("INSERT INTO %s (pk, v) VALUES (?, ?)", 1, 1);
+         execute("INSERT INTO %s (pk, v) VALUES (?, ?)", 2, 1);
+         execute("INSERT INTO %s (pk, v) VALUES (?, ?)", 3, 3);
+ 
+         assertRows(execute("SELECT pk, v FROM %s WHERE v = 1"),
+                    row(1, 1),
+                    row(2, 1));
+ 
+         assertRows(execute("SELECT pk, v FROM %s WHERE v = 3"),
+                    row(3, 3));
+ 
+         assertEmpty(execute("SELECT pk, v FROM %s WHERE v = 5"));
+ 
+         createTable("CREATE TABLE %s (pk int PRIMARY KEY, v1 int, v2 int) WITH COMPACT STORAGE");
+         createIndex("CREATE INDEX ON %s(v1)");
+ 
+         execute("INSERT INTO %s (pk, v1, v2) VALUES (?, ?, ?)", 1, 1, 1);
+         execute("INSERT INTO %s (pk, v1, v2) VALUES (?, ?, ?)", 2, 1, 2);
+         execute("INSERT INTO %s (pk, v1, v2) VALUES (?, ?, ?)", 3, 3, 3);
+ 
+         assertRows(execute("SELECT pk, v2 FROM %s WHERE v1 = 1"),
+                    row(1, 1),
+                    row(2, 2));
+ 
+         assertRows(execute("SELECT pk, v2 FROM %s WHERE v1 = 3"),
+                    row(3, 3));
+ 
+         assertEmpty(execute("SELECT pk, v2 FROM %s WHERE v1 = 5"));
+     }
++    
 +    private ResultMessage.Prepared prepareStatement(String cql, boolean forThrift)
 +    {
 +        return QueryProcessor.prepare(String.format(cql, KEYSPACE, currentTable()),
 +                                      ClientState.forInternalCalls(),
 +                                      forThrift);
 +    }
 +
 +    private void validateCell(Cell cell, ColumnDefinition def, ByteBuffer val, long timestamp)
 +    {
 +        assertNotNull(cell);
 +        assertEquals(0, def.type.compare(cell.value(), val));
 +        assertEquals(timestamp, cell.timestamp());
 +    }
 +
 +    private static void assertColumnValue(int expected, String name, Row row, CFMetaData cfm)
 +    {
 +        ColumnDefinition col = cfm.getColumnDefinition(new ColumnIdentifier(name, true));
 +        AbstractType<?> type = col.type;
 +        assertEquals(expected, type.compose(row.getCell(col).value()));
 +    }
 +
 +    /**
 +     * <code>CassandraIndex</code> that blocks during the initialization.
 +     */
 +    public static class IndexBlockingOnInitialization extends CustomCassandraIndex
 +    {
 +        private final CountDownLatch latch = new CountDownLatch(1);
 +
 +        public IndexBlockingOnInitialization(ColumnFamilyStore baseCfs, IndexMetadata indexDef)
 +        {
 +            super(baseCfs, indexDef);
 +        }
 +
 +        @Override
 +        public Callable<?> getInitializationTask()
 +        {
 +            return () -> {
 +                latch.await();
 +                return null;
 +            };
 +        }
 +
 +        @Override
 +        public Callable<?> getInvalidateTask()
 +        {
 +            latch.countDown();
 +            return super.getInvalidateTask();
 +        }
 +    }
  }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org