|
21 | 21 |
|
22 | 22 | .. towncrier release notes start
|
23 | 23 |
|
| 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 | + |
24 | 118 | Airflow 2.10.5 (2025-02-06)
|
25 | 119 | ---------------------------
|
26 | 120 |
|
|
0 commit comments