This is an automated email from the ASF dual-hosted git repository.

ferruzzi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 51184d53a52 Clarify Dag processor scoping and team config in 
Multi-Team docs (#73958)
51184d53a52 is described below

commit 51184d53a527a14a74fb2b103d3cdf26b4993f41
Author: Vincent <[email protected]>
AuthorDate: Mon Oct 5 15:31:02 2026 -0400

    Clarify Dag processor scoping and team config in Multi-Team docs (#73958)
    
    The Multi-Team guide documented per-team triggerer scoping but left readers
    without guidance on isolating Dag parsing per team, on the team resolution
    cache knob, and repeated the team-name constraints in two places.
---
 airflow-core/docs/core-concepts/multi-team.rst | 69 +++++++++++++++++++++++++-
 1 file changed, 67 insertions(+), 2 deletions(-)

diff --git a/airflow-core/docs/core-concepts/multi-team.rst 
b/airflow-core/docs/core-concepts/multi-team.rst
index 30124ee395b..ed772a96116 100644
--- a/airflow-core/docs/core-concepts/multi-team.rst
+++ b/airflow-core/docs/core-concepts/multi-team.rst
@@ -85,6 +85,9 @@ When Multi-Team mode is enabled, the following resources can 
be scoped to specif
 - **XComs**: Tasks can only access XComs of Dags in their own team (plus, for 
reads, global Dags)
 - **Plugins**: A plugin can declare the team that owns it, scoping what it 
contributes to that team
 
+Dags themselves are team-scoped through bundle ownership (see `Dag Bundles and 
Team Ownership`_ above);
+their visibility in the UI and REST API follows the same team boundary, 
subject to the auth manager.
+
 Resources without a team assignment are considered **global** and accessible 
to all teams.
 
 Team-scoped XComs
@@ -167,6 +170,26 @@ Or via environment variable:
 
     Changing this setting on an existing deployment requires careful planning.
 
+.. _multi-team-team-name-cache:
+
+Tuning Team Resolution Caching
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.3.0
+
+Every Dag authorization check resolves the Dag's owning team from its bundle. 
Because some endpoints
+(such as the grid view) re-poll continuously, Airflow caches this ``Dag -> 
team`` mapping in memory to
+avoid repeated joins against the Team table. Control the cache lifetime with:
+
+.. code-block:: ini
+
+    [core]
+    team_name_cache_ttl = 30
+
+The value is the number of seconds a resolved team is cached before it is 
looked up again (default
+``30``). A team reassignment takes up to this many seconds to take effect, and 
different API server
+workers may briefly disagree during that window. Set it to ``0`` to disable 
caching.
+
 Creating and Managing Teams
 ---------------------------
 
@@ -179,8 +202,7 @@ Creating a Team
 
     airflow teams create <team_name>
 
-Team names must be 3-50 characters long and contain only lower case letters, 
digits, hyphens and underscores.
-Two consecutive underscores are not allowed.
+The team name must satisfy the constraints described in `Teams`_ above.
 
 Listing Teams
 ^^^^^^^^^^^^^
@@ -678,6 +700,49 @@ Team filtering and queue filtering are orthogonal — they 
combine as AND condit
     remain unassigned until one starts — the same applies to every queue when 
``--queues`` is used. If you
     combine ``--team-name`` and ``--queues``, this requirement extends to each 
team-and-queue combination.
 
+.. _multi-team-dag-processor:
+
+Team-scoped Dag Processing
+--------------------------
+
+The Dag processor parses Dag files from your configured Dag bundles. Unlike 
the triggerer, it is not
+scoped with ``--team-name`` directly; it is scoped by **bundle** using the 
``--bundle-name`` CLI argument
+(which may be passed more than once). Because each bundle is owned by at most 
one team, scoping a
+processor to a team's bundle(s) scopes it to that team. The teams a processor 
serves are derived from the
+:ref:`Dag bundle config <multi-team-dag-bundles>`.
+
+.. code-block:: bash
+
+    # Process only team_a's bundle(s)
+    airflow dag-processor --bundle-name team_a_dags
+
+    # Process several bundles (for example, all of team_b's bundles)
+    airflow dag-processor --bundle-name team_b_dags --bundle-name 
team_b_extra_dags
+
+    # Process every configured bundle (all teams and global bundles)
+    airflow dag-processor
+
+Running **one Dag processor per team** (scoped to that team's bundles) is 
recommended, so that each
+team's Dag code is parsed in a separate process and teams stay isolated. 
Unlike the triggerer, however,
+this is not required for coverage: a global triggerer only picks up teamless 
triggers, whereas a Dag
+processor started without ``--bundle-name`` parses *every* configured bundle. 
A single global Dag
+processor therefore covers every team's Dags as well as global (teamless) 
bundles, which is possible but
+gives up the per-team parsing isolation.
+
+.. note::
+
+    When you do split parsing across multiple ``--bundle-name`` processors, 
make sure every configured
+    bundle is covered by at least one running processor; a bundle that no 
processor parses will not have
+    its Dags parsed or updated.
+
+.. note::
+
+    Scoping a processor to a team's bundles keeps teams in separate parsing 
processes, but all those
+    processes still share the same host. For the tightest boundary, run each 
team's Dag processor on
+    separate team-owned compute (for example, separate VMs, containers, or 
servers) so that one team's
+    Dag parsing cannot consume resources or otherwise interfere with another 
team's. This is not required,
+    but it provides stronger isolation than per-process separation alone.
+
 .. _multi-team-asset-event-filtering:
 
 Team-Based Asset Event Filtering

Reply via email to