feat: Add feature view versioning support to FAISS online store by YassinNouh21 · Pull Request #6256 · feast-dev/feast
Summary
- When
enable_online_feature_view_versioningis enabled, FAISS indices are namespaced by versioned table keys (e.g.project_driver_stats_v2) so multiple feature view versions coexist in memory - Refactored singleton
_index/_in_memory_storeto per-table dictionaries (_indices/_in_memory_stores) - Reuses shared
compute_table_id()fromhelpers.pyfor consistency with PostgreSQL and MySQL stores (feat: Add feature view versioning support to PostgreSQL and MySQL online stores #6193) - Registered
FaissOnlineStorein_check_versioned_read_support()gate
What this PR does / why we need it
Closes #6173
Feature view versioning was introduced in #6101, but version-qualified feature references (e.g. driver_stats@v2:trips_today) only worked with SQLite, PostgreSQL, and MySQL online stores. All other online stores raised VersionedOnlineReadNotSupported when a versioned ref was used.
This PR adds versioned read/write support to the FAISS online store, following the same pattern as the PostgreSQL/MySQL implementation (#6193):
- Write path: when
enable_online_feature_view_versioningis enabled,_table_idappends a_v{N}suffix to the in-memory key namespace, routing materialization to the correct versioned index - Read path: version-qualified lookups (
@v2) setprojection.version_tagon the feature view;_table_idpicks this up and routes to the correct index.projection.version_tagtakes priority overcurrent_version_number - Multi-table support: replaced single class-level
_index/_in_memory_storewith per-table_indices/_in_memory_storesdicts - Gate:
_check_versioned_read_supportinonline_store.pynow allowsFaissOnlineStorethrough
Which issue(s) this PR fixes
Part of #2728
Checks
- I've made sure the tests are passing.
- My commits are signed off (
git commit -s) - My PR title follows conventional commits format
Testing Strategy
- Unit tests
- Integration tests
- Manual tests
- Testing is not required for this change
Added 16 unit tests covering _table_id with versioning disabled/enabled, projection.version_tag priority over current_version_number, version 0 edge case, versioned read support gate, versioned write/read round trips, namespace isolation between versions, missing index handling, and teardown cleanup.