Commit b59cb6c
committed
fix: Resolve segfault in filtered Vamana query execution by persisting filter_labels
The filtered Vamana query functionality was experiencing segmentation faults
when querying an index loaded from storage. The root cause was that the
filter_labels_ data structure (which maps each vector to its label set) was
not being persisted to or loaded from TileDB storage.
During query execution, filtered_greedy_search_multi_start() accesses
filter_labels_[node_id] to check if visited nodes match the query filter.
When the index was loaded from storage, filter_labels_ remained empty,
causing out-of-bounds access and segfaults.
Changes:
- Add filter_labels storage to vamana_group.h using CSR-like format:
- filter_labels_offsets: offset array (num_vectors + 1 elements)
- filter_labels_data: flat array of all label IDs
- Implement write logic in vamana_index::write_index() to flatten and
persist filter_labels_ to the two arrays
- Implement load logic in vamana_index constructor to reconstruct
filter_labels_ from the CSR format when opening from storage
- Update clear_history_impl() to handle filter label arrays
Testing:
- C++ unit tests (unit_filtered_vamana) pass
- Python test test_filtered_query_equality now passes (previously segfaulted)
- Filtered queries work correctly end-to-end
This completes the filtered Vamana storage persistence implementation.1 parent a89611c commit b59cb6c
3 files changed
Lines changed: 114 additions & 3 deletions
File tree
- apis/python/src/tiledb/vector_search
- src/include/index
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1846 | 1846 | | |
1847 | 1847 | | |
1848 | 1848 | | |
1849 | | - | |
1850 | | - | |
1851 | | - | |
1852 | 1849 | | |
1853 | 1850 | | |
1854 | 1851 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
| 68 | + | |
| 69 | + | |
68 | 70 | | |
69 | 71 | | |
70 | 72 | | |
| |||
119 | 121 | | |
120 | 122 | | |
121 | 123 | | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
122 | 130 | | |
123 | 131 | | |
124 | 132 | | |
| |||
243 | 251 | | |
244 | 252 | | |
245 | 253 | | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
246 | 266 | | |
247 | 267 | | |
248 | 268 | | |
| |||
353 | 373 | | |
354 | 374 | | |
355 | 375 | | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
356 | 401 | | |
357 | 402 | | |
358 | 403 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
452 | 452 | | |
453 | 453 | | |
454 | 454 | | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
455 | 486 | | |
456 | 487 | | |
457 | 488 | | |
| |||
1161 | 1192 | | |
1162 | 1193 | | |
1163 | 1194 | | |
| 1195 | + | |
| 1196 | + | |
| 1197 | + | |
| 1198 | + | |
| 1199 | + | |
| 1200 | + | |
| 1201 | + | |
| 1202 | + | |
| 1203 | + | |
| 1204 | + | |
| 1205 | + | |
| 1206 | + | |
| 1207 | + | |
| 1208 | + | |
| 1209 | + | |
| 1210 | + | |
| 1211 | + | |
| 1212 | + | |
| 1213 | + | |
| 1214 | + | |
| 1215 | + | |
| 1216 | + | |
| 1217 | + | |
| 1218 | + | |
| 1219 | + | |
| 1220 | + | |
| 1221 | + | |
| 1222 | + | |
| 1223 | + | |
| 1224 | + | |
| 1225 | + | |
| 1226 | + | |
| 1227 | + | |
| 1228 | + | |
| 1229 | + | |
| 1230 | + | |
| 1231 | + | |
| 1232 | + | |
1164 | 1233 | | |
1165 | 1234 | | |
1166 | 1235 | | |
| |||
0 commit comments