Fix TaskInstance crash with non-serialized operators missing get_weight#64557
Merged
vatsrahul1001 merged 2 commits intoapache:mainfrom Apr 1, 2026
Merged
Conversation
TaskInstance.refresh_from_task() and insert_mapping() call task.weight_rule.get_weight() unconditionally, but BaseOperator stores weight_rule as a WeightRule enum (no get_weight method). Only SerializedBaseOperator's @Property converts it to a PriorityWeightStrategy. This breaks any code creating a TaskInstance from a non-serialized operator. Convert weight_rule via validate_and_load_priority_weight_strategy() when it lacks get_weight, preserving duck-typed custom strategies.
vatsrahul1001
approved these changes
Apr 1, 2026
Backport failed to create: v3-2-test. View the failure log Run detailsNote: As of Merging PRs targeted for Airflow 3.X In matter of doubt please ask in #release-management Slack channel.
You can attempt to backport this manually by running: cherry_picker 860277d v3-2-testThis should apply the commit to the v3-2-test branch and leave the commit in conflict state marking After you have resolved the conflicts, you can continue the backport process by running: cherry_picker --continueIf you don't have cherry-picker installed, see the installation guide. |
Contributor
|
Manual bacport #64597 |
Subham-KRLX
pushed a commit
to Subham-KRLX/airflow
that referenced
this pull request
Apr 3, 2026
…ht (apache#64557) * Fix TaskInstance crash with non-serialized operators missing get_weight
Suraj-kumar00
pushed a commit
to Suraj-kumar00/airflow
that referenced
this pull request
Apr 7, 2026
…ht (apache#64557) * Fix TaskInstance crash with non-serialized operators missing get_weight
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
TaskInstance.refresh_from_task()andinsert_mapping()calltask.weight_rule.get_weight()unconditionally, butBaseOperator(task-sdk) storesweight_ruleas aWeightRuleenum -- a plain string with noget_weightmethodSerializedBaseOperatorhas a@propertythat lazily converts the enum to aPriorityWeightStrategy(which hasget_weight)TaskInstancefrom a non-serialized operator (tests, external tools, plugins)Fix
Before calling
get_weight(), check whether theweight_ruleobject supports it. If not, convert it viavalidate_and_load_priority_weight_strategy()-- the same functionSerializedBaseOperatoruses. Useshasattrrather thanisinstanceso duck-typed custom strategies (WeightRuleProtocol) pass through without double-wrapping.Gotchas
hasattrcheck is a no-op for serialized ones that already haveget_weight)WeightRuleProtocolfrom task-sdk/types.py definesget_weightstructurally, sohasattris the correct check overisinstance(PriorityWeightStrategy)