-
Notifications
You must be signed in to change notification settings - Fork 16.3k
Description
Apache Airflow version
3.0.2
If "Other Airflow 2 version" selected, which one?
No response
What happened?
When using Airflow 3.x with email_on_failure=True in task configuration, email notifications fail to send due to template rendering errors in the default email templates. This issue appears to be an ongoing regression in the new SDK architecture.
Issue Evolution:
1. Airflow 3.0.1 - log_url Template Error:
UndefinedError: 'airflow.sdk.execution_time.task_runner.RuntimeTaskInstance object' has no attribute 'log_url'
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/sdk/execution_time/task_runner.py", line 1268 in main
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/sdk/execution_time/task_runner.py", line 1248 in finalize
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/sdk/execution_time/task_runner.py", line 1076 in _send_task_error_email
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py", line 473 in _get_email_subject_content
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/helpers.py", line 244 in render_template_to_string
File "<template>", line 22 in root
2. Airflow 3.0.3rc5 - mark_success_url Template Error: After upgrading to 3.0.3rc5 expecting the template issue to be resolved, a different but similar error occurred:
UndefinedError: 'airflow.sdk.execution_time.task_runner.RuntimeTaskInstance object' has no attribute 'mark_success_url'
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/sdk/execution_time/task_runner.py", line 1302 in main
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/sdk/execution_time/task_runner.py", line 1279 in finalize
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/sdk/execution_time/task_runner.py", line 1110 in _send_task_error_email
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py", line 411 in _get_email_subject_content
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/helpers.py", line 244 in render_template_to_string
File "<template>", line 26 in root
Root Cause: The default email templates reference template variables ({{ log_url }}, {{ mark_success_url }}) that are not available in the new SDK's RuntimeTaskInstance object. While the log_url issue has been addressed between 3.0.1 and 3.0.3rc5, the mark_success_url template variable still causes the same type of rendering failure.
Impact: Email notifications for task failures remain completely broken when using default email templates across multiple Airflow 3.x versions, preventing critical alerting functionality.
What you think should happen instead?
Expected Behavior: When a task fails and email_on_failure=True is configured, Airflow should successfully send email notifications using the default email templates without any template rendering errors. The email notification system should work seamlessly regardless of whether the task is running under the legacy execution model or the new SDK architecture.
Specifically:
Tasks with email_on_failure=True should trigger email notifications on failure
Default email templates should render successfully with all required template variables
Email notifications should be sent via the configured SMTP connection
Users should receive informative failure notification emails containing relevant task and execution details
Root Cause Analysis:
Incomplete SDK Migration: The new SDK architecture introduced RuntimeTaskInstance objects that have a different structure/interface compared to the legacy TaskInstance objects, but the default email templates were not fully updated to accommodate this change.
Template Variable Mapping: The default email templates still reference template variables (log_url, mark_success_url) that were available in the legacy task instance model but are either missing, renamed, or structured differently in the new RuntimeTaskInstance object.
Incremental Fix Approach: The fix appears to be incomplete - while log_url was addressed between 3.0.1 and 3.0.3rc5, mark_success_url still causes the same issue.
Missing Template Context Adaptation: The email rendering system may need an adapter layer to bridge the gap between the new SDK objects and the existing template variables, or the templates need to be completely rewritten to use the correct attribute paths for the new object structure.
Suggested Solution: Either update all default email templates to use template variables that are available in RuntimeTaskInstance, or provide a compatibility layer that maps the legacy template variables to their new equivalents in the SDK architecture.
How to reproduce
Minimal Reproduction Case:
- Setup Airflow 3.0.1 or 3.0.3rc5 (using Docker or any installation method)
- Configure SMTP connection via Airflow UI:
- Go to Admin → Connections
- Create a new connection with Connection Id:
smtp_default(as referenced in the default config) - Set Connection Type: SMTP
- Configure your SMTP server details (host, port, login, password)
- Note: This approach uses the UI instead of modifying airflow.cfg since the default config references
email_conn_id = smtp_default
- Create a simple DAG that will fail with email notifications enabled:
from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedelta
default_args = {
"owner": "test",
"email_on_failure": True,
"email": ["test@example.com"],
"retries": 0, # No retries to fail immediately
}
with DAG(
dag_id="test_email_failure",
default_args=default_args,
description="Test email failure notifications",
schedule=None, # Manual trigger only
start_date=datetime(2024, 1, 1),
catchup=False,
) as dag:
# Task that will always fail
failing_task = BashOperator(
task_id="failing_task",
bash_command="exit 1", # Force failure
)
- Trigger the DAG manually from the Airflow UI or CLI
- Observe the failure: : The task will fail as expected, but instead of sending an email notification, you'll see template rendering errors in the task logs.
Expected Result: Email notification should be sent successfully using the smtp_default connection.
Actual Result:
In Airflow 3.0.1: UndefinedError: 'RuntimeTaskInstance object' has no attribute 'log_url'
In Airflow 3.0.3rc5: UndefinedError: 'RuntimeTaskInstance object' has no attribute 'mark_success_url'
Operating System
NAME="Ubuntu" VERSION="20.04.6 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.04.6 LTS" VERSION_ID="20.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=focal UBUNTU_CODENAME=focal
Versions of Apache Airflow Providers
apache-airflow-providers-amazon | 9.9.0 | Amazon integration (including Amazon Web Services (AWS) https://aws.amazon.com/) -- | -- | -- apache-airflow-providers-celery | 3.12.1 | Celery https://docs.celeryq.dev/en/stable/ apache-airflow-providers-cncf-kubernetes | 10.6.1 | Kubernetes https://kubernetes.io/ apache-airflow-providers-common-compat | 1.7.2 | Common Compatibility Provider - providing compatibility code for previous Airflow versions apache-airflow-providers-common-io | 1.6.1 | Common IO Provider apache-airflow-providers-common-messaging | 1.0.4 | Common Messaging Provider apache-airflow-providers-common-sql | 1.27.3 | Common SQL Provider https://en.wikipedia.org/wiki/SQL apache-airflow-providers-docker | 4.4.1 | Docker https://www.docker.com/ apache-airflow-providers-elasticsearch | 6.3.1 | Elasticsearch https://www.elastic.co/elasticsearch apache-airflow-providers-fab | 2.3.0 | Flask App Builder https://flask-appbuilder.readthedocs.io/ apache-airflow-providers-ftp | 3.13.1 | File Transfer Protocol (FTP) https://tools.ietf.org/html/rfc114 apache-airflow-providers-git | 0.0.4 | Distributed version control system (GIT) https://git-scm.com/ apache-airflow-providers-google | 16.1.0 | Google services including: - Google Ads https://ads.google.com/ - Google Cloud (GCP) https://cloud.google.com/ - Google Firebase https://firebase.google.com/ - Google LevelDB https://github.com/google/leveldb/ - Google Marketing Platform https://marketingplatform.google.com/ - Google Workspace https://workspace.google.com/(formerly Google Suite) apache-airflow-providers-grpc | 3.8.1 | gRPC https://grpc.io/ apache-airflow-providers-hashicorp | 4.3.1 | Hashicorp including Hashicorp Vault https://www.vaultproject.io/ apache-airflow-providers-http | 5.3.2 | Hypertext Transfer Protocol (HTTP) https://www.w3.org/Protocols/ apache-airflow-providers-microsoft-azure | 12.5.0 | Microsoft Azure https://azure.microsoft.com/ apache-airflow-providers-mysql | 6.3.2 | MySQL https://www.mysql.com/ apache-airflow-providers-odbc | 4.10.1 | ODBC https://github.com/mkleehammer/pyodbc/wiki apache-airflow-providers-openlineage | 2.5.0 | OpenLineage https://openlineage.io/ apache-airflow-providers-postgres | 6.2.1 | PostgreSQL https://www.postgresql.org/ apache-airflow-providers-redis | 4.1.1 | Redis https://redis.io/ apache-airflow-providers-sendgrid | 4.1.2 | Sendgrid https://sendgrid.com/ apache-airflow-providers-sftp | 5.3.2 | SSH File Transfer Protocol (SFTP) https://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/ apache-airflow-providers-slack | 9.1.2 | Slack https://slack.com/services integration including: - Slack API https://api.slack.com/ - Slack Incoming Webhook https://api.slack.com/messaging/webhooks apache-airflow-providers-smtp | 2.1.1 | Simple Mail Transfer Protocol (SMTP) https://tools.ietf.org/html/rfc5321 apache-airflow-providers-snowflake | 6.5.0 | Snowflake https://www.snowflake.com/ apache-airflow-providers-ssh | 4.1.1 | Secure Shell (SSH) https://tools.ietf.org/html/rfc4251 apache-airflow-providers-standard | 1.4.0 | Airflow Standard Provider [apache-airflow-providers-amazon](https://airflow.apache.org/docs/apache-airflow-providers-amazon/9.9.0/) 9.9.0 Amazon integration (including Amazon Web Services (AWS) https://aws.amazon.com/) [apache-airflow-providers-celery](https://airflow.apache.org/docs/apache-airflow-providers-celery/3.12.1/) 3.12.1 Celery https://docs.celeryq.dev/en/stable/ [apache-airflow-providers-cncf-kubernetes](https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/10.6.1/) 10.6.1 Kubernetes https://kubernetes.io/ [apache-airflow-providers-common-compat](https://airflow.apache.org/docs/apache-airflow-providers-common-compat/1.7.2/) 1.7.2 Common Compatibility Provider - providing compatibility code for previous Airflow versions [apache-airflow-providers-common-io](https://airflow.apache.org/docs/apache-airflow-providers-common-io/1.6.1/) 1.6.1 Common IO Provider [apache-airflow-providers-common-messaging](https://airflow.apache.org/docs/apache-airflow-providers-common-messaging/1.0.4/) 1.0.4 Common Messaging Provider [apache-airflow-providers-common-sql](https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.3/) 1.27.3 Common SQL Provider https://en.wikipedia.org/wiki/SQL [apache-airflow-providers-docker](https://airflow.apache.org/docs/apache-airflow-providers-docker/4.4.1/) 4.4.1 Docker https://www.docker.com/ [apache-airflow-providers-elasticsearch](https://airflow.apache.org/docs/apache-airflow-providers-elasticsearch/6.3.1/) 6.3.1 Elasticsearch https://www.elastic.co/elasticsearch [apache-airflow-providers-fab](https://airflow.apache.org/docs/apache-airflow-providers-fab/2.3.0/) 2.3.0 Flask App Builder https://flask-appbuilder.readthedocs.io/ [apache-airflow-providers-ftp](https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.13.1/) 3.13.1 File Transfer Protocol (FTP) https://tools.ietf.org/html/rfc114 [apache-airflow-providers-git](https://airflow.apache.org/docs/apache-airflow-providers-git/0.0.4/) 0.0.4 Distributed version control system (GIT) https://git-scm.com/ [apache-airflow-providers-google](https://airflow.apache.org/docs/apache-airflow-providers-google/16.1.0/) 16.1.0 Google services including: - Google Ads https://ads.google.com/ - Google Cloud (GCP) https://cloud.google.com/ - Google Firebase https://firebase.google.com/ - Google LevelDB https://github.com/google/leveldb/ - Google Marketing Platform https://marketingplatform.google.com/ - Google Workspace https://workspace.google.com/(formerly Google Suite) [apache-airflow-providers-grpc](https://airflow.apache.org/docs/apache-airflow-providers-grpc/3.8.1/) 3.8.1 gRPC https://grpc.io/ [apache-airflow-providers-hashicorp](https://airflow.apache.org/docs/apache-airflow-providers-hashicorp/4.3.1/) 4.3.1 Hashicorp including Hashicorp Vault https://www.vaultproject.io/ [apache-airflow-providers-http](https://airflow.apache.org/docs/apache-airflow-providers-http/5.3.2/) 5.3.2 Hypertext Transfer Protocol (HTTP) https://www.w3.org/Protocols/ [apache-airflow-providers-microsoft-azure](https://airflow.apache.org/docs/apache-airflow-providers-microsoft-azure/12.5.0/) 12.5.0 Microsoft Azure https://azure.microsoft.com/ [apache-airflow-providers-mysql](https://airflow.apache.org/docs/apache-airflow-providers-mysql/6.3.2/) 6.3.2 MySQL https://www.mysql.com/ [apache-airflow-providers-odbc](https://airflow.apache.org/docs/apache-airflow-providers-odbc/4.10.1/) 4.10.1 ODBC https://github.com/mkleehammer/pyodbc/wiki [apache-airflow-providers-openlineage](https://airflow.apache.org/docs/apache-airflow-providers-openlineage/2.5.0/) 2.5.0 OpenLineage https://openlineage.io/ [apache-airflow-providers-postgres](https://airflow.apache.org/docs/apache-airflow-providers-postgres/6.2.1/) 6.2.1 PostgreSQL https://www.postgresql.org/ [apache-airflow-providers-redis](https://airflow.apache.org/docs/apache-airflow-providers-redis/4.1.1/) 4.1.1 Redis https://redis.io/ [apache-airflow-providers-sendgrid](https://airflow.apache.org/docs/apache-airflow-providers-sendgrid/4.1.2/) 4.1.2 Sendgrid https://sendgrid.com/ [apache-airflow-providers-sftp](https://airflow.apache.org/docs/apache-airflow-providers-sftp/5.3.2/) 5.3.2 SSH File Transfer Protocol (SFTP) https://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/ [apache-airflow-providers-slack](https://airflow.apache.org/docs/apache-airflow-providers-slack/9.1.2/) 9.1.2 Slack https://slack.com/services integration including: - Slack API https://api.slack.com/ - Slack Incoming Webhook https://api.slack.com/messaging/webhooks [apache-airflow-providers-smtp](https://airflow.apache.org/docs/apache-airflow-providers-smtp/2.1.1/) 2.1.1 Simple Mail Transfer Protocol (SMTP) https://tools.ietf.org/html/rfc5321 [apache-airflow-providers-snowflake](https://airflow.apache.org/docs/apache-airflow-providers-snowflake/6.5.0/) 6.5.0 Snowflake https://www.snowflake.com/ [apache-airflow-providers-ssh](https://airflow.apache.org/docs/apache-airflow-providers-ssh/4.1.1/) 4.1.1 Secure Shell (SSH) https://tools.ietf.org/html/rfc4251 [apache-airflow-providers-standard](https://airflow.apache.org/docs/apache-airflow-providers-standard/1.4.0/) 1.4.0 Airflow Standard ProviderDeployment
Docker-Compose
Deployment details
No response
Anything else?
No response
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