From 5403ad3912d279b91abfa4030dbca09f9cf4d32a Mon Sep 17 00:00:00 2001 From: Michael Marshall Date: Wed, 22 Oct 2025 17:53:32 -0500 Subject: [PATCH] CNDB-15554: Bump jvector to 4.0.0-rc.5 (cherry picked from commit b5e76e02411e41b0b5e2579d7afda284a9b0e391) --- build.xml | 2 +- .../index/sai/disk/vector/CassandraDiskAnn.java | 12 ++++++------ .../index/sai/disk/vector/CloseableReranker.java | 8 ++++---- .../index/sai/disk/vector/CompactionGraph.java | 2 +- .../sai/disk/vector/BruteForceRowIdIteratorTest.java | 12 +++++++++--- 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/build.xml b/build.xml index d78dd6f08c5f..ca783f60cdbb 100644 --- a/build.xml +++ b/build.xml @@ -754,7 +754,7 @@ - + diff --git a/src/java/org/apache/cassandra/index/sai/disk/vector/CassandraDiskAnn.java b/src/java/org/apache/cassandra/index/sai/disk/vector/CassandraDiskAnn.java index 92544f07e4bc..483fb01f965a 100644 --- a/src/java/org/apache/cassandra/index/sai/disk/vector/CassandraDiskAnn.java +++ b/src/java/org/apache/cassandra/index/sai/disk/vector/CassandraDiskAnn.java @@ -27,7 +27,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.github.jbellis.jvector.graph.GraphIndex; +import io.github.jbellis.jvector.graph.ImmutableGraphIndex; import io.github.jbellis.jvector.graph.GraphSearcher; import io.github.jbellis.jvector.graph.disk.feature.FeatureId; import io.github.jbellis.jvector.graph.disk.OnDiskGraphIndex; @@ -72,7 +72,7 @@ public class CassandraDiskAnn private final FileHandle graphHandle; private final OnDiskOrdinalsMap ordinalsMap; private final Set features; - private final GraphIndex graph; + private final ImmutableGraphIndex graph; private final VectorSimilarityFunction similarityFunction; @Nullable private final CompressedVectors compressedVectors; @@ -124,7 +124,7 @@ public CassandraDiskAnn(SSTableContext sstableContext, SegmentMetadata.Component // don't load full PQVectors, all we need is the metadata from the PQ at the start pq = ProductQuantization.load(reader); compression = new VectorCompression(VectorCompression.CompressionType.PRODUCT_QUANTIZATION, - rawGraph.getDimension() * Float.BYTES, + graph.getDimension() * Float.BYTES, pq.compressedVectorSize()); } else @@ -231,7 +231,7 @@ public CloseableIterator search(VectorFloat queryVector, searcher.usePruning(usePruning); try { - var view = (GraphIndex.ScoringView) searcher.getView(); + var view = (ImmutableGraphIndex.ScoringView) searcher.getView(); SearchScoreProvider ssp; // FusedADC can no longer be written due to jvector upgrade. However, it's possible these index files // still exist, so we have to support them. @@ -311,9 +311,9 @@ public OrdinalsView getOrdinalsView() return ordinalsMap.getOrdinalsView(); } - public GraphIndex.ScoringView getView() + public ImmutableGraphIndex.ScoringView getView() { - return (GraphIndex.ScoringView) graph.getView(); + return (ImmutableGraphIndex.ScoringView) graph.getView(); } public boolean containsUnitVectors() diff --git a/src/java/org/apache/cassandra/index/sai/disk/vector/CloseableReranker.java b/src/java/org/apache/cassandra/index/sai/disk/vector/CloseableReranker.java index b85b33c81b55..0415b9eb4bcc 100644 --- a/src/java/org/apache/cassandra/index/sai/disk/vector/CloseableReranker.java +++ b/src/java/org/apache/cassandra/index/sai/disk/vector/CloseableReranker.java @@ -20,21 +20,21 @@ import java.io.Closeable; -import io.github.jbellis.jvector.graph.GraphIndex; +import io.github.jbellis.jvector.graph.ImmutableGraphIndex; import io.github.jbellis.jvector.graph.similarity.ScoreFunction; import io.github.jbellis.jvector.vector.VectorSimilarityFunction; import io.github.jbellis.jvector.vector.types.VectorFloat; import org.apache.cassandra.io.util.FileUtils; /** - * An ExactScoreFunction that closes the underlying {@link GraphIndex.ScoringView} when closed. + * An ExactScoreFunction that closes the underlying {@link ImmutableGraphIndex.ScoringView} when closed. */ public class CloseableReranker implements ScoreFunction.ExactScoreFunction, Closeable { - private final GraphIndex.ScoringView view; + private final ImmutableGraphIndex.ScoringView view; private final ExactScoreFunction scoreFunction; - public CloseableReranker(VectorSimilarityFunction similarityFunction, VectorFloat queryVector, GraphIndex.ScoringView view) + public CloseableReranker(VectorSimilarityFunction similarityFunction, VectorFloat queryVector, ImmutableGraphIndex.ScoringView view) { this.view = view; this.scoreFunction = view.rerankerFor(queryVector, similarityFunction); diff --git a/src/java/org/apache/cassandra/index/sai/disk/vector/CompactionGraph.java b/src/java/org/apache/cassandra/index/sai/disk/vector/CompactionGraph.java index c2339861037f..a9be73b1177b 100644 --- a/src/java/org/apache/cassandra/index/sai/disk/vector/CompactionGraph.java +++ b/src/java/org/apache/cassandra/index/sai/disk/vector/CompactionGraph.java @@ -372,7 +372,7 @@ public long addGraphNode(InsertionResult result) public SegmentMetadata.ComponentMetadataMap flush() throws IOException { // header is required to write the postings, but we need to recreate the writer after that with an accurate OrdinalMapper - writer.writeHeader(); + writer.writeHeader(builder.getGraph().getView()); writer.close(); int nInProgress = builder.insertsInProgress(); diff --git a/test/unit/org/apache/cassandra/index/sai/disk/vector/BruteForceRowIdIteratorTest.java b/test/unit/org/apache/cassandra/index/sai/disk/vector/BruteForceRowIdIteratorTest.java index 22658da82ac7..bdd3e0fd3958 100644 --- a/test/unit/org/apache/cassandra/index/sai/disk/vector/BruteForceRowIdIteratorTest.java +++ b/test/unit/org/apache/cassandra/index/sai/disk/vector/BruteForceRowIdIteratorTest.java @@ -22,7 +22,7 @@ import org.junit.Test; -import io.github.jbellis.jvector.graph.GraphIndex; +import io.github.jbellis.jvector.graph.ImmutableGraphIndex; import io.github.jbellis.jvector.graph.NodeQueue; import io.github.jbellis.jvector.graph.NodesIterator; import io.github.jbellis.jvector.graph.similarity.ScoreFunction; @@ -63,7 +63,7 @@ public void testBruteForceRowIdIteratorForEmptyPQAndTopKEqualsLimit() assertTrue(view.isClosed); } - private static class TestView implements GraphIndex.ScoringView + private static class TestView implements ImmutableGraphIndex.ScoringView { private boolean isClosed = false; @@ -102,7 +102,7 @@ public int size() } @Override - public GraphIndex.NodeAtLevel entryNode() + public ImmutableGraphIndex.NodeAtLevel entryNode() { throw new UnsupportedOperationException(); } @@ -112,5 +112,11 @@ public Bits liveNodes() { throw new UnsupportedOperationException(); } + + @Override + public boolean contains(int i, int i1) + { + return false; + } } }