You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by je...@apache.org on 2022/02/17 21:39:02 UTC
[airflow] 11/43: Fix session usage in ``/rendered-k8s`` view (#21006)
This is an automated email from the ASF dual-hosted git repository.
jedcunningham pushed a commit to branch v2-2-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
commit daebc586d0aaaddaea4658734c9292dece150c6a
Author: Tzu-ping Chung <tp...@astronomer.io>
AuthorDate: Fri Jan 21 21:44:40 2022 +0800
Fix session usage in ``/rendered-k8s`` view (#21006)
We can't commit the session too early because later functions need that
session to fetch related objects.
Fix #20534.
(cherry picked from commit a665f48b606065977e0d3952bc74635ce11726d1)
---
airflow/www/views.py | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/airflow/www/views.py b/airflow/www/views.py
index 9b868f3..2182a17 100644
--- a/airflow/www/views.py
+++ b/airflow/www/views.py
@@ -84,7 +84,7 @@ from pygments import highlight, lexers
from pygments.formatters import HtmlFormatter
from sqlalchemy import Date, and_, desc, func, inspect, union_all
from sqlalchemy.exc import IntegrityError
-from sqlalchemy.orm import joinedload
+from sqlalchemy.orm import Session, joinedload
from wtforms import SelectField, validators
from wtforms.validators import InputRequired
@@ -116,7 +116,7 @@ from airflow.utils.docs import get_doc_url_for_provider, get_docs_url
from airflow.utils.helpers import alchemy_to_dict
from airflow.utils.log import secrets_masker
from airflow.utils.log.log_reader import TaskLogReader
-from airflow.utils.session import create_session, provide_session
+from airflow.utils.session import NEW_SESSION, create_session, provide_session
from airflow.utils.state import State
from airflow.utils.strings import to_boolean
from airflow.version import version
@@ -1124,7 +1124,8 @@ class Airflow(AirflowBaseView):
]
)
@action_logging
- def rendered_k8s(self):
+ @provide_session
+ def rendered_k8s(self, session: Session = NEW_SESSION):
"""Get rendered k8s yaml."""
if not settings.IS_K8S_OR_K8SCELERY_EXECUTOR:
abort(404)
@@ -1135,14 +1136,15 @@ class Airflow(AirflowBaseView):
form = DateTimeForm(data={'execution_date': dttm})
root = request.args.get('root', '')
logging.info("Retrieving rendered templates.")
- dag = current_app.dag_bag.get_dag(dag_id)
+
+ dag: DAG = current_app.dag_bag.get_dag(dag_id)
task = dag.get_task(task_id)
- dag_run = dag.get_dagrun(execution_date=dttm)
- ti = dag_run.get_task_instance(task_id=task.task_id)
+ dag_run = dag.get_dagrun(execution_date=dttm, session=session)
+ ti = dag_run.get_task_instance(task_id=task.task_id, session=session)
pod_spec = None
try:
- pod_spec = ti.get_rendered_k8s_spec()
+ pod_spec = ti.get_rendered_k8s_spec(session=session)
except AirflowException as e:
msg = "Error rendering Kubernetes POD Spec: " + escape(e)
if e.__cause__: