Repository navigation
Return only the latest Dag version from iter_all_latest_version_dags - #70935
Eason09053360 wants to merge 2 commits into
Conversation
The method promised latest-version dags in its name and docstring but read every serialized_dag row, so FAB permission syncing processed each Dag once per version and could apply an outdated access_control last.
3b3e4a6 to
b40af4f
Compare
SameerMesiah97
left a comment
There was a problem hiding this comment.
Just one comment on the tests.
|
Hello @Eason09053360 - thank you for your contributions to Apache Airflow! The Airflow community has introduced a limit of 5 open pull requests at a time for contributors without write access to the repository. You currently have 33 open pull requests, so - as a one-time step of introducing the limit - we closed the ones where maintainers have not engaged yet:
These pull requests stay open because maintainers are already engaged in them - they count towards your limit:
This is not a judgement of you or of your changes. We never told contributors before that opening many pull requests at once was a problem, so there is nothing to feel bad about - and nothing is lost: your branches, commits and the review history stay where they are. What we ask you to do is to make your first prioritization decision: choose which of the pull requests above matter most to you, and reopen them (up to 5 open at a time, including the ones still open) with the "Reopen pull request" button or While your pull requests are waiting for review, the most valuable thing you can do is help in other ways - reviewing other contributors' pull requests, helping with issues, and taking part in the discussions on the devlist and Slack. Why we introduced the limit, what it means for you and how to reopen or restore a pull request is explained in https://github.com/apache/airflow/blob/main/contributing-docs/32_open_pull_request_limit.rst. Drafted-by: Claude Code (Opus 5); reviewed by @potiuk before posting |
The method promised latest-version dags in its name and docstring but read every serialized_dag row, so FAB permission syncing processed each Dag once per version and could apply an outdated access_control last.
DBDagBag.iter_all_latest_version_dagspromises latest-version Dags in both itsname and its docstring, but it read every
serialized_dagrow without filteringby version.
Its only production caller is FAB's
create_dag_specific_permissions, so DAG-levelpermission syncing iterated each Dag once per version. Besides the wasted work, the
query has no
ORDER BY, so when versions carry differentaccess_controlthe oneapplied last is undefined and an outdated policy can win.
SerializedDagModel._latest_by_version_select()already supported "all dags" viadag_ids=None; this exposes that through the publicget_latest_serialized_dags()wrapper, which keeps the existing
load_op_linkshook in the loop intact. All fiveexisting callers pass
dag_ids=explicitly, so the signature change is backwardscompatible.
The existing test mocked
session.scalars, so it could not catch a wrong query.Added a regression test that writes two real versions to the database.
Was generative AI tooling used to co-author this PR?
Generated-by: Claude Code (Opus 5) following the guidelines
{pr_number}.significant.rst, in airflow-core/newsfragments. You can add this file in a follow-up commit after the PR is created so you know the PR number.