This is an automated email from the ASF dual-hosted git repository. vatsrahul1001 pushed a commit to branch changes-3.4.0rc1 in repository https://gitbox.apache.org/repos/asf/airflow.git
commit d1c2fdd0e32989e8cc0398be15b9d9bf52481aae Author: Rahul Vats <[email protected]> AuthorDate: Mon Oct 26 18:38:54 2026 +0530 Add release notes for 3.4.0rc1 --- RELEASE_NOTES.rst | 100 +++++++++++++++++++++++ airflow-core/newsfragments/74896.bugfix.rst | 1 - airflow-core/newsfragments/75414.significant.rst | 20 ----- docs/spelling_wordlist.txt | 2 + reproducible_build.yaml | 4 +- 5 files changed, 104 insertions(+), 23 deletions(-) diff --git a/RELEASE_NOTES.rst b/RELEASE_NOTES.rst index fe8d90f0f25..b4a9b5e0cb0 100644 --- a/RELEASE_NOTES.rst +++ b/RELEASE_NOTES.rst @@ -30,6 +30,28 @@ Airflow 3.4.0 (2026-11-02) Significant Changes ^^^^^^^^^^^^^^^^^^^ +``airflow.utils.email`` is deprecated in favor of the SMTP provider (#75414) +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +The functions in ``airflow.utils.email`` (``send_email``, ``send_email_smtp``, ``send_mime_email``, +``build_mime_message`` and ``get_email_address_list``) now live in +``airflow.providers.smtp.utils.emailer``. The old names still work and raise a ``DeprecatedImportWarning``. +Airflow now requires ``apache-airflow-providers-smtp>=3.2.0``. + +Keep ``[email] email_backend`` set to ``airflow.utils.email.send_email_smtp``. Airflow treats that value as +"send task emails with ``SmtpNotifier``", which reads all SMTP settings from the Connection. Changing it to +the provider path sends through the ``[smtp]`` settings instead. + +If you call these functions directly: + +* The SMTP Connection is looked up with ``BaseHook.get_connection``. A script that runs outside Airflow's + processes needs the Connection in an environment variable or a secrets backend, not only in the metadata + database. +* Settings are read through the Task SDK configuration, so values changed at runtime with + ``airflow.configuration.conf.set()`` are not seen. ``airflow.cfg`` and environment variables work as before. +* Tests that patch ``airflow.utils.email.send_mime_email`` no longer intercept the call made by + ``send_email_smtp``. Patch ``airflow.providers.smtp.utils.emailer.send_mime_email`` instead. + Task Loops (#73005, #74222, #74274, #74275) """"""""""""""""""""""""""""""""""""""""""" @@ -489,6 +511,14 @@ and loop iterations regenerated by clearing. New Features ^^^^^^^^^^^^ +- Add asset ID filtering to ``airflow db clean`` (#75581) +- UI: Show task group states as stacked cards in the Grid view (#75486) +- Let plugins add their own actions to Dag, run and task instance rows (#75427) +- UI: Show secondary states of mapped tasks in the Grid view (#75426) +- Java SDK: Let a native Java Dag set one queue for all its tasks (#75402) +- TS SDK: Reject blank edge labels and label task edges into groups (#75385) +- Expose task instance loop pass and expansion size to listeners (#75309) +- UI: Add time range filtering to the Gantt view (#75261) - Java SDK: Add edge labels to native Dags (#75173) - Add a Duplicate action to the Connections list (#75143) - Make the scheduler Dag cache size and TTL configurable (#75087) @@ -573,6 +603,44 @@ New Features Bug Fixes ^^^^^^^^^ +- Let listeners see the end date of a skipped task instance (#75685) +- Reset Dag autoregistration state when a Python Dag file fails to load (#75648) +- Fix serialization of datetimes with a fixed UTC offset (#75647) +- Clear retry policy state when a task instance is cleared (#75646) +- Refuse Human-in-the-Loop responses once the task stopped waiting (#75645) +- TS SDK: Reject a blank queue in Dag and task specs (#75605) +- TS SDK: Fix "Dynamic require" error for CommonJS packages in ``airflow-ts-pack`` (#75603) +- UI: Fix visual and console-error bugs in the Dag list and details pages (#75593) +- Fix scheduler crash when retrying a task that timed out or was killed externally (#75582) +- Go SDK: Stop log attributes from displacing standard log fields (#75564) +- Decide the ``min_one_success`` trigger rule per index in mapped task groups (#75511) +- Fix task loop iteration log links pointing to a nonexistent page (#75494) +- Go SDK: Fail a task whose return-value XCom push fails (#75476) +- Run the Kerberos ticket renewer without metadata database checks (#75467) +- Guard ``register_at_fork`` in shared stats for Windows compatibility (#75464) +- Redact secrets written through ``RedactedIO.writelines()`` (#75463) +- Fix the ``dag_processing.last_duration`` timing metric reporting the wrong value (#75459) +- Keep the token cookie set by a route in ``JWTRefreshMiddleware`` (#75454) +- Run team tasks on the team executor when named by class or path (#75436) +- Speed up API server requests by keeping JWT checks off the event loop (#75409) +- Read a team's running task logs through the team's executor (#75408) +- UI: Keep the multiselect filter pill's focus ring visible (#75398) +- Hide assets the caller may not read from the UI dependencies graph (#75390) +- Fix empty audit log ``dag_id`` for ``DAG.cli()`` subcommands (#75388) +- Fix duplicate pending Dag runs for the same asset partition key (#75382) +- Return a 5xx response on a database deadlock when updating task state (#75368) +- Show source code lines in task log tracebacks (#75355) +- UI: Show errors when the task clear confirmation check fails (#75331) +- Fix ``tasks clear --task-regex`` matching as a plain substring (#75325) +- Fix task instance filtering for null start dates (#75324) +- UI: Render Arabic durations with the correct plural form (#75323) +- Reject non-positive ``max_active_runs`` when creating a backfill (#75320) +- UI: Reveal selected Dag folders when names contain pipes (#75319) +- Skip scheduling tasks when their Dag cannot be deserialized (#75263) +- Reject blank pool names and Variable keys in the REST API (#75258) +- Fix task clear and callback bundles after code-only Dag changes (#75256) +- UI: Show a label instead of a broken link for hidden assets (#75250) +- Fix Dag run filtering for null start dates (#75233) - Fix log template sync failing when a custom SQL Alchemy schema is configured (#75194) - Java SDK: Send log timestamps in UTC (#75186) - Fix 500 when ordering the Dag list by state or start_date (#75148) @@ -626,6 +694,7 @@ Bug Fixes - API: Translate domain ValueError in Task State Store route (#73753) - Filter jobs API ``is_alive`` in SQL so pagination stays correct (#73684) - Fix boolean value of start date used in url start_date_gte filter. (#73676) +- Stop a commented-out ``executable_resumable`` from marking a module durable (#73607) - Fix square corner on fully filled dashboard History bars (#73543) - Fix airflow plugins and dags pause printing prose with --output json (#73270) - Fix 500 from POST ``/auth/token`` on a request body it cannot parse (#73258) @@ -685,6 +754,23 @@ Bug Fixes Miscellaneous ^^^^^^^^^^^^^ +- Add metrics for task and asset state store access (#75729) +- Add ``dag_id`` and ``task_id`` tags to the resumable_job metrics (#75721) +- Require cadwyn 8.1 to allow FastAPI 0.137+ (#75689) +- Optimize the scheduler's asset orphanage check with an ``EXISTS`` subquery instead of a fan-out join (#75644) +- Report language SDK runtime launch failures in the task log (#75561) +- UI: Remove the info tooltip from the Dag version comparison (#75535) +- UI: Make the Dags sidebar button a link and move Dag Runs and Task Instances under Browse (#75517) +- UI: Show the filtered task count in the Dag Tasks tab heading (#75490) +- Clarify the backfill reprocessing option labels in the CLI and REST API (#75465) +- TS SDK: Take the task state store retention in seconds (#75460) +- UI: Show the Dag version diff occurrence count on the path (#75441) +- Require ``httpx2`` instead of ``httpx`` in airflow-core (#75424) +- Go SDK: Write the edge label text before the task (#75365) +- UI: Clean up the Dag Version tab (#75318) +- Warn about overly large task state values from language SDK tasks (#75299) +- Number task loop iterations from one instead of zero (#75260) +- UI: Preload base React plugin bundles with the page (#75259) - TS SDK: Collect ``dag_dependencies`` in the tasks pass (#75191) - Mask CLI secrets in the audit log by parsed argument, not argv position (#75144) - UI: Replace stacked Dag header banners with inline status (#75125) @@ -881,6 +967,20 @@ Miscellaneous Doc Only Changes ^^^^^^^^^^^^^^^^ +- Go SDK: Correct the documented install command that broke the first bundle build (#75594) +- Add missing German Dag trigger translations (#75568) +- Complete German UI translations (#75567) +- Fix deferral paths in the task lifecycle diagram (#75515) +- Limit the CLI reference's page contents to top-level commands (#75501) +- Add missing zh-TW translations for Dag version path tooltips (#75484) +- Add a consolidated language SDK compatibility matrix (#75482) +- Fix upgrade guide sections showing as separate pages in the docs sidebar (#75470) +- Java SDK: Rewrite the user docs around Dag definition (#75439) +- Close German translation gaps (#75389) +- Go SDK: Rewrite the user docs around Dag definition (#75383) +- Add missing Taiwanese Mandarin translations for Dag start and end date trigger messages (#75372) +- TS SDK: Align the README with the authoring guide (#75300) +- Add missing Taiwanese Mandarin UI translations (#75278) - Complete Hindi (hi) UI translations (#75183) - Document that the HITL operator body is rendered as Markdown (#75136) - Fix missing and incorrect endpoints in the API permission reference (#75099) diff --git a/airflow-core/newsfragments/74896.bugfix.rst b/airflow-core/newsfragments/74896.bugfix.rst deleted file mode 100644 index 0ea1420f44e..00000000000 --- a/airflow-core/newsfragments/74896.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -The REST API now rejects a pool name or variable key that is empty or only whitespace. ``POST /api/v2/pools`` and ``POST /api/v2/variables`` return 422 for such a value, and ``PATCH /api/v2/pools/{pool_name}`` returns 400 instead of renaming the pool to the empty string. Pools and variables that already have a blank name can still be read and deleted. diff --git a/airflow-core/newsfragments/75414.significant.rst b/airflow-core/newsfragments/75414.significant.rst deleted file mode 100644 index 8feb51b2682..00000000000 --- a/airflow-core/newsfragments/75414.significant.rst +++ /dev/null @@ -1,20 +0,0 @@ -``airflow.utils.email`` is deprecated in favor of the SMTP provider - -The functions in ``airflow.utils.email`` (``send_email``, ``send_email_smtp``, ``send_mime_email``, -``build_mime_message`` and ``get_email_address_list``) now live in -``airflow.providers.smtp.utils.emailer``. The old names still work and raise a ``DeprecatedImportWarning``. -Airflow now requires ``apache-airflow-providers-smtp>=3.2.0``. - -Keep ``[email] email_backend`` set to ``airflow.utils.email.send_email_smtp``. Airflow treats that value as -"send task emails with ``SmtpNotifier``", which reads all SMTP settings from the Connection. Changing it to -the provider path sends through the ``[smtp]`` settings instead. - -If you call these functions directly: - -* The SMTP Connection is looked up with ``BaseHook.get_connection``. A script that runs outside Airflow's - processes needs the Connection in an environment variable or a secrets backend, not only in the metadata - database. -* Settings are read through the Task SDK configuration, so values changed at runtime with - ``airflow.configuration.conf.set()`` are not seen. ``airflow.cfg`` and environment variables work as before. -* Tests that patch ``airflow.utils.email.send_mime_email`` no longer intercept the call made by - ``send_email_smtp``. Patch ``airflow.providers.smtp.utils.emailer.send_mime_email`` instead. diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt index 8df92f5f9ed..e66f9466c55 100644 --- a/docs/spelling_wordlist.txt +++ b/docs/spelling_wordlist.txt @@ -138,6 +138,7 @@ autocomplete autodetect autogenerated automl +autoregistration Autoscale autoscale autoscaled @@ -1141,6 +1142,7 @@ mTLS multi-cloud multimodal multiprocess +multiselect mutex mv mwaa diff --git a/reproducible_build.yaml b/reproducible_build.yaml index 9aaa1727bab..3889c951f39 100644 --- a/reproducible_build.yaml +++ b/reproducible_build.yaml @@ -1,2 +1,2 @@ -release-notes-hash: 20fa29512a9fcb66caeeb13a65a38fe2 -source-date-epoch: 1792517881 +release-notes-hash: 581265b7dbb2f8ffca89b968b5f1f1f6 +source-date-epoch: 1793020461
