GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — `feast apply` silently ignores ttl updates when the new ttl is `None` or `timedelta(0)` · Issue #6703 · feast-dev/feast

feast apply silently ignores ttl updates when the new ttl is None or timedelta(0) #6703

New issue
Copy link
New issue
Copy link
Closed
#6709
Closed
feast apply silently ignores ttl updates when the new ttl is None or timedelta(0)#6703
#6709
Copy link
Labels
kind/bugpriority/p2

Description

@erald02
erald02
opened on Aug 4, 2026
Issue body actions

Expected Behavior

Re-applying an existing FeatureView with ttl=None or ttl=timedelta(0) should clear the ttl in the registry. After feast apply, store.get_feature_view("foo_fv").ttl should reflect the new "no expiry" value.

Current Behavior

The old ttl is silently retained. store.get_feature_view("foo_fv").ttl still returns the previous finite value, with no warning or error, while feast apply keeps printing the same "changed" diff on every run.

Registry.apply_feature_view() routes ttl changes through _update_metadata_fields() instead of creating a new version, and that method gates the ttl copy behind a truthiness check on the raw timedelta:

if (
    hasattr(existing_proto.spec, "ttl")
    and hasattr(updated_fv, "ttl")
    and updated_fv.ttl          # falsy for both None and timedelta(0)
):

Since None and timedelta(0) are both falsy — and both are the documented way to express "no ttl" — the update is dropped exactly in the case it should support. get_ttl_duration() already handles None correctly; only the outer guard is wrong. Still present on master as of 2026-08.

Practical impact: a FeatureView intended to never expire silently kept a stale finite ttl, causing get_historical_features to drop ~11.6% of otherwise-valid rows from a point-in-time join, with no error or warning.

Steps to reproduce

from datetime import timedelta
from feast import Entity, FeatureView, Field, FileSource, Project
from feast.types import Float32

project = Project(name="ttl_repro")
entity = Entity(name="foo", join_keys=["foo_id"])
source = FileSource(
    name="foo_source",
    path="./data/foo.parquet",
    timestamp_field="event_timestamp",
)

# 1. Apply with a finite ttl -> fv.ttl == 10 days (correct)
fv = FeatureView(
    name="foo_fv",
    entities=[entity],
    ttl=timedelta(days=10),
    schema=[Field(name="bar", dtype=Float32)],
    source=source,
)

# 2. Change ttl to "no expiry" and `feast apply` again
fv_v2 = FeatureView(
    name="foo_fv",
    entities=[entity],
    ttl=None,  # or timedelta(days=0) - same result
    schema=[Field(name="bar", dtype=Float32)],
    source=source,
)

Then check store.get_feature_view("foo_fv").ttl — it is still timedelta(days=10).

Specifications

  • Version: 0.65.0 (PyPI); also confirmed on master as of 2026-08
  • Platform:
  • Subsystem: Registry — sdk/python/feast/infra/registry/registry.py, Registry._update_metadata_fields()

Possible Solution

Drop the outer truthiness check and always sync ttl on update, relying on get_ttl_duration()'s existing None-handling and defaulting to an explicit zero Duration when unset:

if hasattr(existing_proto.spec, "ttl") and hasattr(updated_fv, "ttl"):
    if isinstance(updated_fv, FeatureView):
        existing_proto.spec.ttl.CopyFrom(updated_fv.get_ttl_duration() or Duration())
    elif isinstance(updated_fv, LabelView):
        ttl_duration = Duration()
        if updated_fv.ttl is not None:
            ttl_duration.FromTimedelta(updated_fv.ttl)
        existing_proto.spec.ttl.CopyFrom(ttl_duration)

Happy to open a PR with this plus a regression test (apply with finite ttl, re-apply with ttl=None, assert the registry reflects it)

Activity

  1. erald02
    added
    kind/bug
    priority/p2
    on Aug 4, 2026
  2. saket3395
    added a commit that references this issue on Aug 11, 2026

    test: cover ttl clearing in _update_metadata_fields (feast-dev#6703)

    970b048
  3. ntkathole
    added 2 commits that reference this issue on Aug 14, 2026

    fix: feast apply ignores ttl updates when new ttl is None or timedelt…

    This issue will close once commit f9aaff6 is merged into the 'master' branch.
    f9aaff6

    test: cover ttl clearing in _update_metadata_fields (feast-dev#6703)

    This issue will close once commit 2c8a95d is merged into the 'master' branch.
    2c8a95d
  4. saket3395
    added 2 commits that reference this issue on Aug 14, 2026

    fix: feast apply ignores ttl updates when new ttl is None or timedelt…

    This issue will close once commit b20d2f6 is merged into the 'master' branch.
    b20d2f6

    test: cover ttl clearing in _update_metadata_fields (feast-dev#6703)

    This issue will close once commit 2ddc090 is merged into the 'master' branch.
    2ddc090
  5. ntkathole
    added 2 commits that reference this issue on Aug 14, 2026

    fix: feast apply ignores ttl updates when new ttl is None or timedelt…

    This issue will close once commit 73d3956 is merged into the 'master' branch.
    73d3956

    test: cover ttl clearing in _update_metadata_fields (feast-dev#6703)

    This issue will close once commit cc340e8 is merged into the 'master' branch.
    cc340e8
  6. ntkathole
    closed this as completedin #6709on Aug 14, 2026
  7. ntkathole
    added a commit that references this issue on Aug 14, 2026

    fix: Feast apply silently ignoring ttl updates to None or timedelta(0) (

    This issue will close once commit 97b0f25 is merged into the 'master' branch.
    97b0f25
  8. franciscojavierarceo
    added a commit that references this issue on Aug 21, 2026

    chore(release): release 0.66.0

    1d5be95
  9. HSarwat
    added a commit that references this issue on Aug 22, 2026

    fix: Feast apply silently ignoring ttl updates to None or timedelta(0) (

    This issue will close once commit dfddd85 is merged into the 'master' branch.
    dfddd85
  10. Michie-hub
    added 2 commits that reference this issue on Aug 31, 2026

    fix: Feast apply silently ignoring ttl updates to None or timedelta(0) (

    This issue will close once commit 0c5753b is merged into the 'master' branch.
    0c5753b

    chore(release): release 0.66.0

    This issue will close once commit a29c923 is merged into the 'master' branch.
    a29c923
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugpriority/p2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      You are visitor 01402503 — GeezerVison does not store the pages you look up.
      Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.