You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Global scheduler pause override (preserve per-DAG is_paused) #69699
Add a deployment-wide global pause toggle (UI, REST API, and CLI) that makes the scheduler treat every DAG as paused without changing any DAG's stored is_paused value.
While global pause is enabled:
The scheduler schedules no new DAG runs.
The scheduler schedules no new tasks.
Per-DAG is_paused in the metadata DB stays untouched.
When global pause is disabled:
Each DAG immediately returns to its previous behavior based on its own is_paused state.
No restore step and no tracking of which DAGs were paused before.
This is a scheduler-level override, not bulk pause/unpause of individual DAGs.
The UI should show when global pause is active. Per-DAG pause toggles should still reflect each DAG's real is_paused value (not the effective scheduling state), so operators can see which DAGs were already paused before the freeze.
Mockup
Use case/motivation
We need a way to freeze an entire Airflow deployment for operational work (upgrades, migrations, incident response) without losing per-DAG pause state.
Pausing every DAG individually overwrites is_paused and makes it hard to restore the previous mix of paused and active DAGs on large deployments. Suspend/resume style approaches that mutate is_paused and restore later have the same problem.
Typical scenario: a deployment with many DAGs, some intentionally paused and some active. An admin needs to stop all scheduling quickly, do maintenance, then release the freeze and have every DAG behave exactly as it did before. No custom restore script, no risk of unpausing DAGs that were paused on purpose.
This is partially enabled in the UI in 3.4.0 with filtering dags by not paused dags and then pausing all or draining all at once. It has some pagination limits, but it will be a lot less bad than before.
The scheduler would simply treat all three as paused while the global override is enabled. Disabling the override would then immediately restore the previous behavior without needing to track or restore any DAG state.
With the current bulk pause approach, A and B would be changed to is_paused = true, and bulk unpausing them later could also unpause C unless the previous state is tracked separately.
So I see the 3.4 UI functionality as helpful for bulk operations, but the proposal here is specifically for a scheduler level override, rather than a bulk mutation of per DAG pause state.
Activity
shivaam commentedon Jul 14, 2026
@Moemenmohamed24 we dont assign issues any more. You can directly start working on it and create a PR if you want to.
https://github.com/apache/airflow/blob/main/contributing-docs/04_how_to_contribute.rst#contribute-code-changes
bbovenzi commentedon Oct 1, 2026
This is partially enabled in the UI in 3.4.0 with filtering dags by not paused dags and then pausing all or draining all at once. It has some pagination limits, but it will be a lot less bad than before.
pedro-cf commentedon Oct 1, 2026
Thanks @bbovenzi , I think the existing bulk pause/drain functionality addresses a related use case, but not quite the one proposed here.
The key requirement is that a global pause must not modify the individual DAGs' is_paused state.
For example, if A and B are active and C is intentionally paused, a global pause should leave the stored state as:
The scheduler would simply treat all three as paused while the global override is enabled. Disabling the override would then immediately restore the previous behavior without needing to track or restore any DAG state.
With the current bulk pause approach, A and B would be changed to is_paused = true, and bulk unpausing them later could also unpause C unless the previous state is tracked separately.
So I see the 3.4 UI functionality as helpful for bulk operations, but the proposal here is specifically for a scheduler level override, rather than a bulk mutation of per DAG pause state.
pedro-cf commentedon Oct 2, 2026
@bbovenzi
Mockup:
bbovenzi commentedon Oct 6, 2026
Yes, that's why I didn't close the issue. Just providing additional context