Respect update_mask in bulk connection updates - #72486
Conversation
|
Congratulations on your first Pull Request and welcome to the Apache Airflow community! If you have any issues or are unsure about any anything please check our Contributors' Guide
|
ColtenOuO
left a comment
There was a problem hiding this comment.
The direction of this fix looks good, but other areas might need to be adjusted accordingly.
update_mask is shared across all entities, but an individual entity might not provide every field specified in the mask.
For example, if extra is included in the mask but omitted from one entity, this change passes the mask down to update_orm_from_pydantic, which ends up clearing that entity's existing extra via set_extra(None).
Could you test whether this bug holds true? If it does, I'd suggest fixing it and adding a regression test to prevent this from happening again.
Thanks for the thoughtful review. This is a very good catch. I'll investigate how the shared If the issue does exist, I'll update the fix and add a regression test. Otherwise, I'll explain why this behavior does not take place. This may take some time, but I'll report back once I've completed the investigation. Thanks again for your careful feedback. |
|
I investigated this case and confirmed that the it is reproducible. The fix now checks both the shared I also added regression tests for heterogeneous entity fields and explicit clearing. |
Description
The Connections bulk update action accepts
update_maskand documents that onlythe listed fields are applied. However,
BulkConnectionService.handle_bulk_updatedoes not pass
action.update_masktoupdate_orm_from_pydantic.As a result, fields included in the request body but omitted from the update mask
are still updated. For example, a request with
update_mask=["description"]alsochanges
conn_typewhenconn_typeis present in the entity. This makes bulkupdates inconsistent with the single-connection PATCH behavior and can modify
fields that the caller did not intend to change.
Pass
action.update_maskto the existing ORM update helper so bulk updates applythe same field filtering as other update paths. Add a regression test covering a
request that provides both
conn_typeanddescriptionwhile masking onlydescription.No documentation changes are needed because this restores the behavior already
described by the existing
update_maskcontract.Was generative AI tooling used to co-author this PR?
Generated-by: OpenAI Codex following the guidelines at https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions