Skip to content

feat: Add Chronon online and offline store integrations#6188

Draft
franciscojavierarceo wants to merge 4 commits into
feast-dev:masterfrom
franciscojavierarceo:chronon
Draft

feat: Add Chronon online and offline store integrations#6188
franciscojavierarceo wants to merge 4 commits into
feast-dev:masterfrom
franciscojavierarceo:chronon

Conversation

@franciscojavierarceo

@franciscojavierarceo franciscojavierarceo commented Mar 27, 2026

Copy link
Copy Markdown
Member

Summary

This adds an in-tree Chronon bridge for Feast. Chronon remains the owner of feature computation, materialization, and online serving; Feast provides registry/source/store integration for historical retrieval and online reads.

The integration includes:

  • ChrononSource for Chronon materialization metadata, Join/GroupBy routing metadata, and source validation
  • ChrononOfflineStore for reading Chronon-produced Parquet materializations with point-in-time historical retrieval
  • ChrononOnlineStore for get_online_features reads through Chronon's feature service
  • ChrononProvider registration as a passthrough provider alias for Chronon-backed repos
  • reference docs for Chronon data sources, offline store, and online store
  • unit, stub integration, optional live-service integration, and a Chronon-specific PR workflow
  • examples/chronon demo covering offline historical retrieval and online reads against Chronon's quickstart service

Notable details

This keeps the Feast/Chronon boundary intentionally narrow:

  • Feast does not launch Chronon jobs, schedule backfills, or manage Chronon materialization.
  • Offline retrieval selects the latest Chronon row at or before the entity timestamp, with created_timestamp_column used to choose the latest duplicate event timestamp.
  • Online reads support both Chronon Joins and GroupBys, URL-encode Chronon object names, and validate Chronon response shape before converting values.
  • The live-service workflow now clones a pinned airbnb/chronon checkout instead of relying on a nonexistent submodule or top-level chronon/ directory.
  • The local Chronon launcher discovers the built service jar, writes the Java service PID, and can stop the full local stack cleanly.

Testing

Ran locally:

  • Installed sbt, checked out airbnb/chronon at 6c0b8de9f0301521baf61a46ff3083c566fb4052, built the quickstart Mongo implementation jar, and built the Chronon service jar with Java 11 and Thrift 0.13.
  • CHRONON_REPO=/Users/farceo/.codex/worktrees/ecbd/chronon JAVA_BIN=/opt/homebrew/opt/openjdk@11/bin/java CHRONON_SERVICE_PORT=19000 infra/scripts/chronon/start-local-chronon-service.sh (CHRONON_SERVICE_URL=http://127.0.0.1:19000; Chronon quickstart fetch returned purchase_price_sum_30d=1253 and refund_amt_sum_30d=1269)
  • CHRONON_SERVICE_URL=http://127.0.0.1:19000 uv run python examples/chronon/run_demo.py (offline demo returned completed_rides_7d=[18, 7]; online demo returned 1253 and 1269)
  • CHRONON_SERVICE_URL=http://127.0.0.1:19000 uv run pytest -c sdk/python/pytest.ini sdk/python/tests/integration/online_store/test_chronon_online_store_real_service.py --integration -q (1 passed)
  • uv run pytest -c sdk/python/pytest.ini sdk/python/tests/unit/infra/online_stores/chronon_online_store sdk/python/tests/unit/infra/offline_stores/contrib/chronon_offline_store sdk/python/tests/integration/online_store/test_chronon_online_store.py sdk/python/tests/integration/offline_store/test_chronon_offline_store.py --integration -q (7 passed)
  • uv run ruff format infra/scripts/chronon/chronon_service_launcher.py examples/chronon/run_demo.py
  • uv run ruff check infra/scripts/chronon/chronon_service_launcher.py examples/chronon/run_demo.py
  • bash -n infra/scripts/chronon/start-local-chronon-service.sh infra/scripts/chronon/stop-local-chronon-service.sh
  • uv run python examples/chronon/run_demo.py --offline-only
  • uv run pre-commit run detect-secrets --files examples/chronon/README.md infra/scripts/chronon/start-local-chronon-service.sh .github/workflows/pr_chronon_integration_tests.yml
  • git diff --check

The live Chronon stack was stopped after verification, and cleanup left no Chronon Java process, listener, or Docker containers running.

Follow-ups

Open questions for follow-up PRs:

  • whether to add caching or a prebuilt image for the Chronon live-service CI path
  • whether future Chronon support should expose richer metadata/discovery from Chronon configs
  • whether to add provider-specific docs/examples beyond the reference pages once the bridge API settles

@franciscojavierarceo franciscojavierarceo changed the title Add Chronon online and offline store integrations feat: Add Chronon online and offline store integrations Mar 27, 2026
Signed-off-by: Francisco Javier Arceo <farceo@redhat.com>
Signed-off-by: Francisco Javier Arceo <farceo@redhat.com>
Signed-off-by: Francisco Javier Arceo <farceo@redhat.com>
Signed-off-by: Francisco Javier Arceo <farceo@redhat.com>
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.

1 participant