Skip to content

Conversation

@astronautas
Copy link
Contributor

@astronautas astronautas commented Jan 19, 2026

What this PR does / why we need it:

See here. In essence, makes sure ODFV with write_to_online_store=True - meaning, cached - (on-demand feature views) get actually computed when querying offline store (get_historical_features) for training set generating, since as per docs (and generic expectation), offline stores do not store precomputed on demand feature view historical values (only online stores store their latest values).

Which issue(s) this PR fixes:

#5776

@astronautas astronautas requested a review from a team as a code owner January 19, 2026 07:08
@astronautas astronautas force-pushed the fix/disable-materialized-odfvs-for-historical-retrieval branch from 78ff90f to c2e42d0 Compare January 19, 2026 07:09
@astronautas astronautas changed the title Fix/disable materialized odfvs for historical retrieval fix: disable materialized odfvs for historical retrieval Jan 19, 2026
@astronautas astronautas changed the title fix: disable materialized odfvs for historical retrieval Fix: disable materialized odfvs for historical retrieval Jan 19, 2026
@astronautas astronautas changed the title Fix: disable materialized odfvs for historical retrieval fix: Disable materialized odfvs for historical retrieval Jan 19, 2026
@astronautas
Copy link
Contributor Author

added some explanations for the context

@astronautas
Copy link
Contributor Author

@franciscojavierarceo

@astronautas
Copy link
Contributor Author

@ntkathole @franciscojavierarceo

FAILED sdk/python/tests/integration/registration/test_universal_registry.py::test_modify_feature_views_success[gcs_registry] - google.api_core.exceptions.TooManyRequests: 429 PUT https://storage.googleapis.com/upload/storage/v1/b/feast-registry-test-1768823153244/o?uploadType=resumable&upload_id=AJRbA5UkNFZsOvkuNKwLRRw4-oOTH9U9Rue973jdMFgJYYKN8LGRKVCmJ-cUy5ggGbPoW56hTKbEjwLItL1LPOaXkSaVZgZhZQbyu5gL4zsyKA: ***
  "error": ***
    "code": 429,
    "message": "The object feast-registry-test-1768823153244/registry.db exceeded the rate limit for object mutation operations (create, update, and delete). Please reduce your request rate. See https://cloud.google.com/storage/docs/gcs429.",
    "errors": [
      ***
        "message": "The object feast-registry-test-1768823153244/registry.db exceeded the rate limit for object mutation operations (create, update, and delete). Please reduce your request rate. See https://cloud.google.com/storage/docs/gcs429.",
        "domain": "usageLimits",
        "reason": "rateLimitExceeded"
      ***
    ]
  ***

seen this? Seems like a quota.

@astronautas
Copy link
Contributor Author

@franciscojavierarceo Seems to have passed now 😁

# This does not change the output, since it forces to recompute ODFVs on historical retrieval
# but that is fine, since ODFVs precompute does not to work for historical retrieval (as per docs), only for online retrieval
for odfv in all_on_demand_feature_views:
odfv.write_to_online_store = False

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't love this solution, but i accept it's a pragmatic one.

@copilot can you come up with an alternative?

Copy link
Contributor Author

@astronautas astronautas Jan 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

adjusted based on copilot suggestion to avoid side effects

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes an issue where materialized on-demand feature views (ODFVs) were incorrectly using precomputed values during historical retrieval operations. The fix ensures that ODFVs are always recomputed when querying the offline store for training set generation, aligning with the documented behavior that offline stores do not store precomputed ODFV values.

Changes:

  • Force ODFVs to recompute during historical retrieval by disabling write_to_online_store
  • Add pytest-xdist as a development dependency
  • Add a new Makefile target for running historical retrieval integration tests

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

File Description
sdk/python/feast/feature_store.py Disables write_to_online_store for all ODFVs before historical retrieval to ensure recomputation
pyproject.toml Adds pytest-xdist development dependency for parallel test execution
Makefile Adds new test target for running historical retrieval integration tests

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +1241 to +1246
for odfv in all_on_demand_feature_views:
odfv.write_to_online_store = False
Copy link

Copilot AI Jan 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mutating the write_to_online_store property of ODFVs in-place may have unintended side effects if these objects are reused elsewhere. Consider creating copies of the ODFVs with the modified property or restoring the original values after use to avoid potential issues with shared state.

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good tip, will adjust

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

adjusted

Signed-off-by: lukas.valatka <lukas.valatka@cast.ai>
@astronautas astronautas force-pushed the fix/disable-materialized-odfvs-for-historical-retrieval branch from 0ff5dc2 to dafd8d2 Compare January 21, 2026 07:50
@astronautas
Copy link
Contributor Author

@franciscojavierarceo Random ray unit test failure, can we re-run? What's the way of self re-running the pipeline btw, seems akward asking you everytime haha.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants