From 7a25983266133a6a5f6f1e10f798a1d8a8c8054c Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 28 Oct 2026 01:48:24 -0700 Subject: [PATCH] vector: cover index names in named_segment_fragments (#12161) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit vector: cover the index name in named_segment_fragments The planner groups tasks by index name — assert the helper actually returns the logical name so a regression dropping it fails. --- seaweed-vector/crates/core/src/segments.rs | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/seaweed-vector/crates/core/src/segments.rs b/seaweed-vector/crates/core/src/segments.rs index 6b83f14344..cc9221b335 100644 --- a/seaweed-vector/crates/core/src/segments.rs +++ b/seaweed-vector/crates/core/src/segments.rs @@ -194,6 +194,33 @@ mod tests { assert_eq!(got, want); } + /// named_segment_fragments must carry the logical index name through — + /// a fanout planner groups tasks by name. + #[tokio::test] + async fn named_segment_fragments_returns_index_names() { + let dir = TempDir::new().unwrap(); + let mut dataset = testing::write_dataset( + &dir, + &testing::vectors(8, 4), + &["a", "b", "c", "d", "e", "f", "g", "h"], + ) + .await; + let params = VectorIndexParams::ivf_flat(4, DistanceType::L2); + dataset + .create_index( + &["vector"], + IndexType::Vector, + Some("shard-a".to_string()), + ¶ms, + false, + ) + .await + .unwrap(); + let named = named_segment_fragments(&dataset, "vector").await.unwrap(); + assert!(!named.is_empty()); + assert!(named.iter().all(|(_, name, _)| name == "shard-a")); + } + /// A scope of fragment ids that no longer exist, an empty list, or an /// empty-segment assignment must return no hits — never fall through to /// an unrestricted scan.