Skip to content

Commit d9ed7b9

Browse files
committed
Add release notes for 2.11.0
1 parent 0b486c0 commit d9ed7b9

File tree

2 files changed

+96
-2
lines changed

2 files changed

+96
-2
lines changed

RELEASE_NOTES.rst

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,100 @@
2121

2222
.. towncrier release notes start
2323

24+
Airflow 2.11.0 (2025-05-20)
25+
---------------------------
26+
27+
Significant Changes
28+
^^^^^^^^^^^^^^^^^^^
29+
30+
``DeltaTriggerTimetable`` for trigger-based scheduling (#47074)
31+
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
32+
33+
This change introduces DeltaTriggerTimetable, a new built-in timetable that complements the existing suite of
34+
Airflow timetables by supporting delta-based trigger schedules without relying on data intervals.
35+
36+
Airflow currently has two major types of timetables:
37+
- Data interval-based (e.g., ``CronDataIntervalTimetable``, ``DeltaDataIntervalTimetable``)
38+
- Trigger-based (e.g., ``CronTriggerTimetable``)
39+
40+
However, there was no equivalent trigger-based option for delta intervals like ``timedelta(days=1)``.
41+
As a result, even simple schedules like ``schedule=timedelta(days=1)`` were interpreted through a data interval
42+
lens—adding unnecessary complexity for users who don't care about upstream/downstream data dependencies.
43+
44+
This feature is backported to Airflow 2.11.0 to help users begin transitioning before upgrading to Airflow 3.0.
45+
46+
- In Airflow 2.11, ``schedule=timedelta(...)`` still defaults to ``DeltaDataIntervalTimetable``.
47+
- A new config option ``[scheduler] create_delta_data_intervals`` (default: ``True``) allows opting in to ``DeltaTriggerTimetable``.
48+
- In Airflow 3.0, this config defaults to ``False``, meaning ``DeltaTriggerTimetable`` becomes the default for timedelta schedules.
49+
50+
By flipping this config in 2.11, users can preview and adopt the new scheduling behavior in advance — minimizing surprises during upgrade.
51+
52+
53+
Consistent timing metrics across all backends (#39908, #43966)
54+
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
55+
56+
Previously, Airflow reported timing metrics in milliseconds for ``StatsD`` but in seconds for other backends
57+
such as ``OpenTelemetry`` and ``Datadog``. This inconsistency made it difficult to interpret or compare
58+
timing metrics across systems.
59+
60+
Airflow 2.11 introduces a new config option:
61+
62+
- ``[metrics] timer_unit_consistency`` (default: ``False`` in 2.11, ``True`` and dropped in Airflow 3.0).
63+
64+
When enabled, all timing metrics are consistently reported in milliseconds, regardless of the backend.
65+
66+
This setting has become mandatory and always ``True`` in Airflow 3.0 (the config will be removed), so
67+
enabling it in 2.11 allows users to migrate early and avoid surprises during upgrade.
68+
69+
Ease migration to Airflow 3
70+
"""""""""""""""""""""""""""
71+
This release introduces several changes to help users prepare for upgrading to Airflow 3:
72+
73+
- All models using ``execution_date`` now also include a ``logical_date`` field. Airflow 3 drops ``execution_date`` entirely in favor of ``logical_date`` (#44283)
74+
- Added ``airflow config lint`` and ``airflow config update`` commands in 2.11 to help audit and migrate configs for Airflow 3.0. (#45736, #50353, #46757)
75+
76+
Python 3.8 support removed
77+
""""""""""""""""""""""""""
78+
Support for Python 3.8 has been removed, as it has reached end-of-life.
79+
Airflow 2.11 requires Python 3.9, 3.10, 3.11, or 3.12.
80+
81+
New Features
82+
""""""""""""
83+
84+
- Introduce ``DeltaTriggerTimetable`` (#47074)
85+
- Backport ``airflow config update`` and ``airflow config lint`` changes to ease migration to Airflow 3 (#45736, #50353)
86+
- Add link to show task in a DAG in DAG Dependencies view (#47721)
87+
- Align timers and timing metrics (ms) across all metrics loggers (#39908, #43966)
88+
89+
Bug Fixes
90+
"""""""""
91+
92+
- Don't resolve path for DAGs folder (#46877)
93+
- Fix ``ti.log_url`` timestamp format from ``"%Y-%m-%dT%H:%M:%S%z"`` to ``"%Y-%m-%dT%H:%M:%S.%f%z"`` (#50306)
94+
- Ensure that the generated ``airflow.cfg`` contains a random ``fernet_key`` and ``secret_key`` (#47755)
95+
- Fixed setting ``rendered_map_index`` via internal api (#49057)
96+
- Store rendered_map_index from ``TaskInstancePydantic`` into ``TaskInstance`` (#48571)
97+
- Allow using ``log_url`` property on ``TaskInstancePydantic`` (Internal API) (#50560)
98+
- Fix Trigger Form with Empty Object Default (#46872)
99+
- Fix ``TypeError`` when deserializing task with ``execution_timeout`` set to ``None`` (#46822)
100+
- Always populate mapped tasks (#46790)
101+
- Ensure ``check_query_exists`` returns a bool (#46707)
102+
- UI: ``/xcom/list`` got exception when applying filter on the ``value`` column (#46053)
103+
- Allow to set note field via the experimental internal api (#47769)
104+
105+
Miscellaneous
106+
"""""""""""""
107+
108+
- Add ``logical_date`` to models using ``execution_date`` (#44283)
109+
- Drop support for Python 3.8 (#49980, #50015)
110+
- Emit warning for deprecated ``BaseOperatorLink.get_link`` signature (#46448)
111+
112+
Doc Only Changes
113+
""""""""""""""""
114+
- Unquote executor ``airflow.cfg`` variable (#48084)
115+
- Update ``XCom`` docs to show examples of pushing multiple ``XComs`` (#46284, #47068)
116+
117+
24118
Airflow 2.10.5 (2025-02-06)
25119
---------------------------
26120

airflow/reproducible_build.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
release-notes-hash: 8e5657e541a0bf44f777a4ec3ee442e3
2-
source-date-epoch: 1738582969
1+
release-notes-hash: 29cc62d87a20424fc3497a81fe4edf91
2+
source-date-epoch: 1747334493

0 commit comments

Comments
 (0)