This is an automated email from the ASF dual-hosted git repository.

pierrejeambrun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new bc6fe0ff93c Add number of queries guard for public hitls (#57549)
bc6fe0ff93c is described below

commit bc6fe0ff93c6f5e97b651033f5bd5ac6ba0e61c0
Author: Pierre Jeambrun <[email protected]>
AuthorDate: Mon Nov 3 12:53:51 2025 +0100

    Add number of queries guard for public hitls (#57549)
    
    * Add number of queries guard in public HITL list endpoints
    
    * Fix CI
---
 .../src/airflow/api_fastapi/core_api/routes/public/hitl.py         | 7 +++++--
 .../tests/unit/api_fastapi/core_api/routes/public/test_hitl.py     | 7 +++++--
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git 
a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/hitl.py 
b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/hitl.py
index ecc266c1e58..f978a75d4a8 100644
--- a/airflow-core/src/airflow/api_fastapi/core_api/routes/public/hitl.py
+++ b/airflow-core/src/airflow/api_fastapi/core_api/routes/public/hitl.py
@@ -53,6 +53,7 @@ from airflow.api_fastapi.core_api.datamodels.hitl import (
 from airflow.api_fastapi.core_api.openapi.exceptions import 
create_openapi_http_exception_doc
 from airflow.api_fastapi.core_api.security import GetUserDep, 
ReadableTIFilterDep, requires_access_dag
 from airflow.api_fastapi.logging.decorators import action_logging
+from airflow.models.dag_version import DagVersion
 from airflow.models.dagrun import DagRun
 from airflow.models.hitl import HITLDetail as HITLDetailModel, HITLUser
 from airflow.models.taskinstance import TaskInstance as TI
@@ -253,8 +254,10 @@ def get_hitl_details(
         .join(TI.dag_run)
         .options(
             joinedload(HITLDetailModel.task_instance).options(
-                joinedload(TI.dag_run),
-            )
+                joinedload(TI.dag_run).joinedload(DagRun.dag_model),
+                joinedload(TI.task_instance_note),
+                joinedload(TI.dag_version).joinedload(DagVersion.bundle),
+            ),
         )
     )
     if dag_id != "~":
diff --git 
a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_hitl.py 
b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_hitl.py
index 4458a2cb80d..6c55e6eb2ff 100644
--- a/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_hitl.py
+++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/public/test_hitl.py
@@ -34,6 +34,7 @@ from airflow.models.log import Log
 from airflow.sdk.execution_time.hitl import HITLUser
 from airflow.utils.state import TaskInstanceState
 
+from tests_common.test_utils.asserts import assert_queries_count
 from tests_common.test_utils.format_datetime import 
from_datetime_to_zulu_without_ms
 
 if TYPE_CHECKING:
@@ -528,7 +529,8 @@ class TestGetHITLDetailsEndpoint:
         test_client: TestClient,
         expected_sample_hitl_detail_dict: dict[str, Any],
     ) -> None:
-        response = test_client.get("/dags/~/dagRuns/~/hitlDetails")
+        with assert_queries_count(3):
+            response = test_client.get("/dags/~/dagRuns/~/hitlDetails")
         assert response.status_code == 200
         assert response.json() == {
             "hitl_details": [expected_sample_hitl_detail_dict],
@@ -597,7 +599,8 @@ class TestGetHITLDetailsEndpoint:
         params: dict[str, Any],
         expected_ti_count: int,
     ) -> None:
-        response = test_client.get("/dags/~/dagRuns/~/hitlDetails", 
params=params)
+        with assert_queries_count(3):
+            response = test_client.get("/dags/~/dagRuns/~/hitlDetails", 
params=params)
         assert response.status_code == 200
         assert response.json()["total_entries"] == expected_ti_count
         assert len(response.json()["hitl_details"]) == expected_ti_count

Reply via email to