create_delta_data_intervals is never read - timedelta/relativedelta schedules check create_cron_data_intervals instead
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 78/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Quiet
- Tech stack
- python
- Domain
- data-engineering
Research direction
Start in task-sdk/src/airflow/sdk/definitions/dag.py at _create_timetable() and compare the timedelta/relativedelta branch with the create_delta_data_intervals entry in airflow-core/src/airflow/config_templates/config.yml. Reproduce the behavior using the issue's configuration steps and inspect the timetable type; done means the delta setting controls delta schedules independently of create_cron_data_intervals.
Written by the indexing model from the issue text.
Description
Under which category would you file this issue?
Task SDK
Apache Airflow version
3.3.0 (bug confirmed present via source review; also reproduced hands-on on 3.2.2, and confirmed present on main as of 2026-07-14)
What happened and how to reproduce it?
airflow.cfg's [scheduler] create_delta_data_intervals setting is never read anywhere in the codebase - it has no effect. Meanwhile [scheduler] create_cron_data_intervals silently controls timetable selection for both cron-string schedules (documented) and timedelta/relativedelta schedules (undocumented, and contradicts config.yml's own description of what create_delta_data_intervals is supposed to do).
Root cause is in _create_timetable() in task-sdk/src/airflow/sdk/definitions/dag.py (lines 148–169 on main / 3.3.0):
if isinstance(interval, timedelta | relativedelta):
if airflow_conf.getboolean("scheduler", "create_cron_data_intervals"): # <-- should be create_delta_data_intervals
return DeltaDataIntervalTimetable(interval)
return DeltaTriggerTimetable(interval)
if isinstance(interval, str):
if airflow_conf.getboolean("scheduler", "create_cron_data_intervals"):
return CronDataIntervalTimetable(interval, timezone)
return CronTriggerTimetable(interval, timezone=timezone)
Both branches check the same config key, create_cron_data_intervals. The timedelta/relativedelta branch should check create_delta_data_intervals instead, per config.yml's own description of that setting (airflow-core/src/airflow/config_templates/config.yml, create_delta_data_intervals entry).
Steps to reproduce
- Use any DAG scheduled with a plain
timedelta, e.g. the stocktutorialDAG:schedule=timedelta(days=1) - In
airflow.cfg, set:[scheduler] create_delta_data_intervals = True - Confirm the config is actually being read:
from airflow.configuration import conf print(conf.getboolean("scheduler", "create_delta_data_intervals")) # prints True - Load the DAG and inspect its timetable:
Result: stillfrom airflow.models import DagBag dag = DagBag().get_dag("tutorial") print(type(dag.timetable))DeltaTriggerTimetable-create_delta_data_intervals=Truehad no effect. - Now instead set
create_cron_data_intervals = True(leavingcreate_delta_data_intervalsat its default) and rerun step 4.
Result:dag.timetablebecomesDeltaDataIntervalTimetable, even though the DAG's schedule is atimedelta, not a cron string - proving the wrong config key is being consulted.
What you think should happen instead?
The timedelta | relativedelta branch of _create_timetable() should check create_delta_data_intervals, matching what config.yml documents for that setting and keeping it independent from create_cron_data_intervals (which should only affect the str/cron branch). The fix is a one-line change:
if isinstance(interval, timedelta | relativedelta):
if airflow_conf.getboolean("scheduler", "create_delta_data_intervals"):
return DeltaDataIntervalTimetable(interval)
return DeltaTriggerTimetable(interval)
Operating System
Windows 11 / WSL2 (Ubuntu), reproduced via a local virtualenv install
Deployment
Virtualenv installation
Apache Airflow Provider(s)
No response
Versions of Apache Airflow Providers
N/A
Official Helm Chart version
Not Applicable
Kubernetes Version
No response
Helm Chart configuration
No response
Docker Image customizations
No response
Anything else?
Confirmed by reading source directly (not just local install):
- Installed venv (Airflow 3.2.2):
venv/lib/python3.12/site-packages/airflow/sdk/definitions/dag.py github.com/apache/airflowtag3.2.2: same codegithub.com/apache/airflowtag3.3.0: same code, lines 148–169github.com/apache/airflowbranchmain: same code, unchanged
Also confirmed create_delta_data_intervals is referenced nowhere else in the codebase except:
airflow-core/src/airflow/cli/commands/config_command.py(CLI config-list metadata only)config_templates/config.yml(docs only)config_templates/unit_tests.cfg(sets ittruefor test fixtures, but no code path reads it for this purpose)
This makes create_delta_data_intervals fully dead config as of at least 3.2.2 through main.
Are you willing to submit PR?
- Yes I am willing to submit a PR!
Code of Conduct
- I agree to follow this project's Code of Conduct
- Dominant language
- Python
- Stars
- 46.9k
- Forks
- 17.9k
- Avg merge
- 2d 5h
- Merged PRs (30d)
- 480
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from apache/airflow
-
kind:bug needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
area:providers good first issue kind:bug kind:documentation provider:google
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
kind:bug needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
-
area:core kind:bug
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
area:providers kind:bug provider:cncf-kubernetes
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100