◐ Shell
clean mode source ↗

feat: Add feature view versioning support to FAISS online store by YassinNouh21 · Pull Request #6256 · feast-dev/feast

Summary

  • When enable_online_feature_view_versioning is 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_store to per-table dictionaries (_indices/_in_memory_stores)
  • Reuses shared compute_table_id() from helpers.py for consistency with PostgreSQL and MySQL stores (feat: Add feature view versioning support to PostgreSQL and MySQL online stores #6193)
  • Registered FaissOnlineStore in _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_versioning is enabled, _table_id appends a _v{N} suffix to the in-memory key namespace, routing materialization to the correct versioned index
  • Read path: version-qualified lookups (@v2) set projection.version_tag on the feature view; _table_id picks this up and routes to the correct index. projection.version_tag takes priority over current_version_number
  • Multi-table support: replaced single class-level _index/_in_memory_store with per-table _indices/_in_memory_stores dicts
  • Gate: _check_versioned_read_support in online_store.py now allows FaissOnlineStore through

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.


Open with Devin