ephraimbuddy commented on code in PR #72721:
URL: https://github.com/apache/airflow/pull/72721#discussion_r3977388090
##########
airflow-core/tests/unit/models/test_dagrun.py:
##########
@@ -4117,18 +4157,69 @@ def on_failure(context):
dr.dag_model = DagModel.get_dagmodel(dag.dag_id, session=session)
ti = dr.get_task_instance("test_task")
ti.dag_version_id = None
+ dr.created_dag_version_id = None
session.flush()
dag.on_failure_callback = on_failure
dag.has_on_failure_callback = True
- dr.produce_dag_callback(dag=dag, success=False, relevant_ti=ti,
reason="task_failure", execute=True)
+ dr.produce_dag_callback(
+ dag=dag,
+ success=False,
+ relevant_ti=ti,
+ reason="task_failure",
+ execute=True,
+ session=session,
+ )
- # Callback still fires with the minimal fallback context (no last_ti
template vars).
assert context_received is not None
assert context_received["reason"] == "task_failure"
- assert "ti" not in context_received
- assert context_received["run_id"] == dr.run_id
+ assert context_received["ti"].task_id == "test_task"
+ assert context_received["ti"].run_id == dr.run_id
+ assert (
+ context_received["ti"].dag_version_id
+ == DagVersion.get_latest_version(dag.dag_id, session=session).id
+ )
+
+ @pytest.mark.parametrize("strip_dag_version", [False, True])
+ def test_produce_dag_callback_preserves_callers_transaction(self,
dag_maker, session, strip_dag_version):
+ """Executing callbacks must not commit or close the session the caller
handed in."""
+
+ def on_failure(context):
+ pass
+
+ with dag_maker("test_dag", session=session,
on_failure_callback=on_failure) as dag:
+ BashOperator(task_id="test_task", bash_command="echo 1")
+
+ dr = dag_maker.create_dagrun()
+ dr.dag_model = DagModel.get_dagmodel(dag.dag_id, session=session)
+ # get_task_instance would otherwise default the session and close this
one.
+ ti = dr.get_task_instance("test_task", session=session)
+ if strip_dag_version:
+ ti.dag_version_id = None
+ dr.created_dag_version_id = None
+ session.flush()
+
+ dag.on_failure_callback = on_failure
+ dag.has_on_failure_callback = True
+
+ with (
+ mock.patch.object(Session, "commit", autospec=True) as mock_commit,
+ mock.patch.object(Session, "close", autospec=True) as mock_close,
+ ):
+ dr.produce_dag_callback(
+ dag=dag,
+ success=False,
+ relevant_ti=ti,
+ reason="task_failure",
+ execute=True,
+ session=session,
Review Comment:
I have made session keyword only
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]