Skip to content

[v3-1-test] Fix grid view crash when task converted to TaskGroup (#61208) (#61279)#62181

Merged
pierrejeambrun merged 1 commit intoapache:v3-1-testfrom
astronomer:backport-61279
Feb 19, 2026
Merged

[v3-1-test] Fix grid view crash when task converted to TaskGroup (#61208) (#61279)#62181
pierrejeambrun merged 1 commit intoapache:v3-1-testfrom
astronomer:backport-61279

Conversation

@pierrejeambrun
Copy link
Member

This commit fixes a TypeError crash in the grid view endpoint when a task is converted to a TaskGroup (or vice versa) between DAG versions.

Root Cause:

  • Old DagRuns had task structure with children=None
  • New DagRuns had TaskGroup structure with children=[...]
  • The _merge_node_dicts function tried to iterate over None -> TypeError

Changes:

  1. Added defensive None checks in _merge_node_dicts function
  2. Only merge children if both nodes have children (not None)
  3. Added comprehensive unit tests for edge cases
  4. Added integration test for task->TaskGroup conversion scenario

Fixes #61208

  • Fix merge logic and add comprehensive tests per reviewer feedback

  • Fix integration test: use SerializedDagModel.write_dag instead of DBDagBag.bag_dag

  • Fix import: use serialized_objects.LazyDeserializedDAG instead of definitions.dag

  • Simplify test: use only sync_dag_to_db (removes redundant write_dag calls)

  • Trigger CI re-run

  • Fix test case: invert v1/v2 to test TaskGroup-to-task conversion

The bug in issue #61208 occurs when a TaskGroup is converted to a simple task, not the other way around. This commit inverts Version 1 and Version 2 in the test case to properly test the actual bug scenario:

  • Version 1: task_a is a TaskGroup with subtasks
  • Version 2: task_a becomes a simple task

Updated all comments and assertions accordingly.

  • Fix trailing blank line in test_grid.py

Pre-commit hooks removed trailing blank line - updating to match.

  • Improve test assertions with full expected JSON
  • Add API call after v1 to verify TaskGroup structure
  • Replace partial assertions with full expected JSON comparison
  • Verify v1 shows TaskGroup with children, v2 shows simple task
  • Addresses review feedback from @jason810496
  • Adjust and clean test

(cherry picked from commit 060532b)


Was generative AI tooling used to co-author this PR?
  • Yes (please specify the tool below)

  • Read the Pull Request Guidelines for more information. Note: commit author/co-author name and email in commits become permanently public when merged.
  • For fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
  • When adding dependency, check compliance with the ASF 3rd Party License Policy.
  • For significant user-facing changes create newsfragment: {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

…pache#61279)

* Fix grid view crash when task converted to TaskGroup (apache#61208)

This commit fixes a TypeError crash in the grid view endpoint when a task
is converted to a TaskGroup (or vice versa) between DAG versions.

Root Cause:
- Old DagRuns had task structure with children=None
- New DagRuns had TaskGroup structure with children=[...]
- The _merge_node_dicts function tried to iterate over None -> TypeError

Changes:
1. Added defensive None checks in _merge_node_dicts function
2. Only merge children if both nodes have children (not None)
3. Added comprehensive unit tests for edge cases
4. Added integration test for task->TaskGroup conversion scenario

Fixes apache#61208

* Fix merge logic and add comprehensive tests per reviewer feedback

* Fix integration test: use SerializedDagModel.write_dag instead of DBDagBag.bag_dag

* Fix import: use serialized_objects.LazyDeserializedDAG instead of definitions.dag

* Simplify test: use only sync_dag_to_db (removes redundant write_dag calls)

* Trigger CI re-run

* Fix test case: invert v1/v2 to test TaskGroup-to-task conversion

The bug in issue apache#61208 occurs when a TaskGroup is converted to a
simple task, not the other way around. This commit inverts Version 1
and Version 2 in the test case to properly test the actual bug scenario:
- Version 1: task_a is a TaskGroup with subtasks
- Version 2: task_a becomes a simple task

Updated all comments and assertions accordingly.

* Fix trailing blank line in test_grid.py

Pre-commit hooks removed trailing blank line - updating to match.

* Improve test assertions with full expected JSON

- Add API call after v1 to verify TaskGroup structure
- Replace partial assertions with full expected JSON comparison
- Verify v1 shows TaskGroup with children, v2 shows simple task
- Addresses review feedback from @jason810496

* Adjust and clean test

---------

Co-authored-by: pierrejeambrun <pierrejbrun@gmail.com>
(cherry picked from commit 060532b)
@boring-cyborg boring-cyborg bot added the area:API Airflow's REST/HTTP API label Feb 19, 2026
@pierrejeambrun pierrejeambrun changed the title Fix grid view crash when task converted to TaskGroup (#61208) (#61279) [v3-1-test] Fix grid view crash when task converted to TaskGroup (#61208) (#61279) Feb 19, 2026
@pierrejeambrun
Copy link
Member Author

Backport of #62181

@pierrejeambrun pierrejeambrun merged commit 5b6d07d into apache:v3-1-test Feb 19, 2026
88 checks passed
@pierrejeambrun pierrejeambrun deleted the backport-61279 branch February 19, 2026 17:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:API Airflow's REST/HTTP API

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Comments