Fixing bad cadwyn migration for upstream map indexes #52797
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
Mapped tasks on old client of version (1.0.1) and new airflow API server (3.0.2) started failing.
Example DAG:
Failure:

The issue was in the Cadwyn version downgrade logic that converts API responses for older clients. When
_get_upstream_map_indexes
correctly returned{"task_2": None}
, thedowngrade_upstream_map_indexes
function was incorrectly converting None to -1 as it seemed semantically right. This conversion was breaking the Task SDK's mapped task expansion logic.The task SDK's
get_task_map_length
function expects None values inupstream_map_indexes
. However, when None was converted to -1, the function calculated (-1 or 1) * len(resolved_val) = -1 * 3 = -3, which triggered the "cannot expand field mapped to length -3".Fix and testing
DAG:
^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named
{pr_number}.significant.rst
or{issue_number}.significant.rst
, in airflow-core/newsfragments.