diff --git a/CHANGES.txt b/CHANGES.txt index db78d5a5cb..d650f0cf34 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 5.0-beta2 + * Fix NullPointerException in ANN+WHERE when adding rows in another partition (CASSANDRA-19404) * Record latencies for SAI post-filtering reads against local storage (CASSANDRA-18940) * Fix VectorMemoryIndex#update logic to compare vectors. Fix Index view (CASSANDRA-19168) * Deprecate native_transport_port_ssl (CASSANDRA-19392) diff --git a/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeOrderingIterator.java b/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeOrderingIterator.java index 195592568b..f2f0284e08 100644 --- a/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeOrderingIterator.java +++ b/src/java/org/apache/cassandra/index/sai/iterators/KeyRangeOrderingIterator.java @@ -81,7 +81,8 @@ public class KeyRangeOrderingIterator extends KeyRangeIterator protected void performSkipTo(PrimaryKey nextToken) { input.skipTo(nextToken); - nextIterator.skipTo(nextToken); + if (nextIterator != null) + nextIterator.skipTo(nextToken); } public void close() diff --git a/test/unit/org/apache/cassandra/index/sai/cql/VectorTypeTest.java b/test/unit/org/apache/cassandra/index/sai/cql/VectorTypeTest.java index 216f46c8fc..1a0123067b 100644 --- a/test/unit/org/apache/cassandra/index/sai/cql/VectorTypeTest.java +++ b/test/unit/org/apache/cassandra/index/sai/cql/VectorTypeTest.java @@ -657,4 +657,22 @@ public class VectorTypeTest extends VectorTester assertRowsIgnoringOrder(execute("SELECT pk FROM %s WHERE val = 'match me' ORDER BY vec ANN OF [1,1] LIMIT 5"), row(1), row(2), row(3), row(4), row(5)); } + + @Test + public void multiPartitionUpdateMultiIndexTest() + { + createTable("CREATE TABLE %s (pk int, row_v vector, metadata map, PRIMARY KEY(pk))"); + createIndex("CREATE CUSTOM INDEX ON %s(entries(metadata)) USING 'StorageAttachedIndex'"); + createIndex("CREATE CUSTOM INDEX ON %s(row_v) USING 'StorageAttachedIndex'"); + + String select = "SELECT * FROM %s WHERE metadata['map_k'] = 'map_v' AND pk = 0 ORDER BY row_v ann of [0.1, 0.2] LIMIT 4"; + assertRows(execute(select)); + + execute("INSERT INTO %s (pk, metadata, row_v) VALUES (0, {'map_k' : 'map_v'}, [0.11, 0.19])"); + Object[] row = row(0, map("map_k", "map_v"), vector(0.11f, 0.19f)); + assertRows(execute(select), row); + + execute("INSERT INTO %s (pk, metadata, row_v) VALUES (10, {'map_k' : 'map_v'}, [0.11, 0.19])"); + assertRows(execute(select), row); + } }