Skip to content

feat: Add remote materialization support via feature server#6590

Open
aniketpalu wants to merge 4 commits into
feast-dev:masterfrom
aniketpalu:feat/remote-materialize
Open

feat: Add remote materialization support via feature server#6590
aniketpalu wants to merge 4 commits into
feast-dev:masterfrom
aniketpalu:feat/remote-materialize

Conversation

@aniketpalu

@aniketpalu aniketpalu commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

What this PR does / why we need it:

Allow store.materialize() and materialize_incremental() to delegate execution to the feature server instead of running the batch engine locally. This eliminates the need for engine-specific dependencies (PySpark, kubernetes client, etc.) and RBAC on the client pod. Components:

  • New shared poll_materialization_status() function
  • Client-side _remote_materialize() with registry-based FV state polling
  • POST /materialize-async and /materialize-incremental-async endpoints (202)
  • materialize_mode, url, timeout, poll_interval config fields
  • 19 unit tests + 2 E2E integration tests Addresses Remote materialization #4526 (remote materialization).

Which issue(s) this PR fixes:

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

Misc

Allow store.materialize() and materialize_incremental() to delegate
execution to the feature server instead of running the batch engine
locally. This eliminates the need for engine-specific dependencies
(PySpark, kubernetes client, etc.) and RBAC on the client pod.
Components:
- New shared poll_materialization_status() function
- Client-side _remote_materialize() with registry-based FV state polling
- POST /materialize-async and /materialize-incremental-async endpoints (202)
- materialize_mode, url, timeout, poll_interval config fields
- 19 unit tests + 2 E2E integration tests
Addresses feast-dev#4526 (remote materialization).

Signed-off-by: Aniket Paluskar <apaluska@redhat.com>
@aniketpalu aniketpalu requested a review from a team as a code owner July 8, 2026 21:27
Signed-off-by: Aniket Paluskar <apaluska@redhat.com>
Allow store.materialize() and materialize_incremental() to delegate
execution to the feature server instead of running the batch engine
locally. This eliminates the need for engine-specific dependencies
(PySpark, kubernetes client, etc.) and RBAC on the client pod.
Components:
- Shared poll_materialization_status() with stateful FV state tracking
- Client-side _remote_materialize_common() with auth forwarding
- POST /materialize-async and /materialize-incremental-async (202)
- _force_local guard prevents infinite recursion on server
- Concurrency guard returns 409 if FV already materializing
- version parameter forwarded through full chain
- materialize_mode, url, timeout, poll_interval config fields
Addresses feast-dev#4526 (remote materialization).

Signed-off-by: Aniket Paluskar <apaluska@redhat.com>
- Use allow_cache=False in concurrency guard to avoid stale registry reads
- Close HTTP session in finally block to prevent resource leaks
- Wrap remote HTTP call with descriptive error message and exception chaining
- Add from-e chaining on timestamp parse errors
- Improve timeout error message with actionable guidance
- Add @model_validator to reject remote mode without url at config time
- Add unit test for config validation

Signed-off-by: Aniket Paluskar <apaluska@redhat.com>
Comment on lines +15 to +17
materialize_mode: Literal["local", "remote"] = "local"
"""When 'remote', store.materialize() delegates to the feature server's
async endpoint instead of running the batch engine locally."""

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I think we dont need to provide the materialize_mode config. We should strictly feature server take care of materialization delegation to compute engine. Leaving no choice to do materialization on client side.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants