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 928e09525823ce48a83e79791cce200aa3d1d639 Author: Tzu-ping Chung <[email protected]> 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__:
