This is an automated email from the ASF dual-hosted git repository. kaxilnaik pushed a commit to branch v3-1-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 9dc3096cb794ec022a2647c0f578fbdd579a39ae Author: Yiming Peng <[email protected]> AuthorDate: Sat Nov 1 03:43:46 2025 +1300 Fix task instances counting in task group header (#55670) closes: #55319 (cherry picked from commit 07d2892974c80eaaf5bdcd91cdc39386966279bb) --- .../airflow/api_fastapi/core_api/services/ui/grid.py | 17 ++++++++--------- .../unit/api_fastapi/core_api/routes/ui/test_grid.py | 8 ++++---- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py b/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py index acf333c64a8..5b20511d31f 100644 --- a/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py +++ b/airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid.py @@ -98,28 +98,26 @@ def _find_aggregates( "type": "mapped_task", "parent_id": parent_id, **_get_aggs_for_node(mapped_details), + "details": mapped_details, } return if isinstance(node, SerializedTaskGroup): - children = [] + children_details = [] for child in get_task_group_children_getter()(node): for child_node in _find_aggregates(node=child, parent_node=node, ti_details=ti_details): if child_node["parent_id"] == node_id: - children.append( - { - "state": child_node["state"], - "start_date": child_node["min_start_date"], - "end_date": child_node["max_end_date"], - } - ) + # Collect detailed task instance data from all children + if child_node.get("details"): + children_details.extend(child_node["details"]) yield child_node if node_id: yield { "task_id": node_id, "type": "group", "parent_id": parent_id, - **_get_aggs_for_node(children), + **_get_aggs_for_node(children_details), + "details": children_details, } return if isinstance(node, SerializedBaseOperator): @@ -128,5 +126,6 @@ def _find_aggregates( "type": "task", "parent_id": parent_id, **_get_aggs_for_node(details), + "details": details, } return diff --git a/airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_grid.py b/airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_grid.py index 93b5ecfa487..9bd06f764d5 100644 --- a/airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_grid.py +++ b/airflow-core/tests/unit/api_fastapi/core_api/routes/ui/test_grid.py @@ -598,7 +598,7 @@ class TestGetGridDataEndpoint: "min_start_date": None, }, { - "child_states": {"success": 2}, + "child_states": {"success": 4}, "max_end_date": "2025-03-02T00:00:12Z", "min_start_date": "2025-03-02T00:00:04Z", "state": "success", @@ -671,7 +671,7 @@ class TestGetGridDataEndpoint: "state": None, }, { - "child_states": {"running": 1}, + "child_states": {"success": 1, "running": 1, "None": 1}, "max_end_date": "2024-12-30T01:02:03Z", "min_start_date": "2024-12-30T01:00:00Z", "state": "running", @@ -692,14 +692,14 @@ class TestGetGridDataEndpoint: "min_start_date": None, }, { - "child_states": {"None": 2}, + "child_states": {"None": 6}, "task_id": "task_group", "max_end_date": None, "min_start_date": None, "state": None, }, { - "child_states": {"None": 1}, + "child_states": {"None": 2}, "task_id": "task_group.inner_task_group", "max_end_date": None, "min_start_date": None,
