Reject negative default_retention_days in task SDK and core API routes#67890
Merged
amoghrajesh merged 3 commits intoJun 3, 2026
Merged
Conversation
default_retention_days in task SDK and core API routes
jroachgolf84
approved these changes
Jun 2, 2026
Collaborator
jroachgolf84
left a comment
There was a problem hiding this comment.
Quick question; are we now able to trigger a cleanup with the API? If so, I need to update my docs.
vincbeck
approved these changes
Jun 2, 2026
kaxil
reviewed
Jun 2, 2026
kaxil
approved these changes
Jun 2, 2026
Contributor
Author
|
Unrelated failures, merging |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Was generative AI tooling used to co-author this PR?
What?
[state_store] default_retention_dayscould be set to a negative integer without any error. The task sdk silently treated it as "never expire" (same as 0), and the API route would compute a negative timedelta, producing anexpires_atin the past.Current behaviour
A negative
default_retention_daysin config is accepted without complaint. In the sdk,days <= 0mapped toexpires_at=None— so -5 behaved identically to 0. In the API route, it produced an expires_at timestamp in the past, causing state rows to expire immediately.Proposed change
Note: expires_at="default" with default_retention_days=0 now correctly stores expires_at=NULL (never expires) on the API path. Previously it computed
now + timedelta(days=0) = now, causing rows to expire immediately, which contradicts both the sdk behaviour and the config docs ("Set to 0 to disable expiry").{pr_number}.significant.rst, in airflow-core/newsfragments. You can add this file in a follow-up commit after the PR is created so you know the PR number.