Benjamin Lerer created CASSANDRA-13666: ------------------------------------------
Summary: Secondary index query on partition key columns might not return partitions with only static data Key: CASSANDRA-13666 URL: https://issues.apache.org/jira/browse/CASSANDRA-13666 Project: Cassandra Issue Type: Bug Reporter: Benjamin Lerer Assignee: Benjamin Lerer The problem can be reproduced with the following test in {{3.0}}: {code} @Test public void testIndexOnPartitionKeyWithPartitionWithoutRows() throws Throwable { createTable("CREATE TABLE %s (pk1 int, pk2 int, c int, s int static, v int, PRIMARY KEY((pk1, pk2), c))"); createIndex("CREATE INDEX ON %s (pk2)"); execute("INSERT INTO %s (pk1, pk2, c, s, v) VALUES (?, ?, ?, ?, ?)", 1, 1, 1, 9, 1); execute("INSERT INTO %s (pk1, pk2, c, s, v) VALUES (?, ?, ?, ?, ?)", 1, 1, 2, 9, 2); execute("INSERT INTO %s (pk1, pk2, c, s, v) VALUES (?, ?, ?, ?, ?)", 3, 1, 1, 9, 1); execute("INSERT INTO %s (pk1, pk2, c, s, v) VALUES (?, ?, ?, ?, ?)", 4, 1, 1, 9, 1); flush(); assertRows(execute("SELECT * FROM %s WHERE pk2 = ?", 1), row(1, 1, 1, 9, 1), row(1, 1, 2, 9, 2), row(3, 1, 1, 9, 1), row(4, 1, 1, 9, 1)); execute("DELETE FROM %s WHERE pk1 = ? AND pk2 = ? AND c = ?", 3, 1, 1); assertRows(execute("SELECT * FROM %s WHERE pk2 = ?", 1), row(1, 1, 1, 9, 1), row(1, 1, 2, 9, 2), row(3, 1, null, 9, null), // This row will not be returned row(4, 1, 1, 9, 1)); } {code} The problem seems to be that the index entries for the static data are inserted with an empty clustering key. When the first {{SELECT}} is executed those entries are removed by {{CompositesSearcher::filterStaleEntries}} which consider that those entries are stales. When the second {{SELECT}} is executed the index ignore the (3, 1) partition as there is not entry for it anymore. -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org