Skip to content

Global scheduler pause override (preserve per-DAG is_paused) #69699

Description

@pedro-cf

Description

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.

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.

Related issues

Are you willing to submit a PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:APIAirflow's REST/HTTP APIarea:Schedulerincluding HA (high availability) schedulerarea:UIRelated to UI/UX. For Frontend Developers.kind:featureFeature Requestsneeds-triagelabel for new issues that we didn't triage yet

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions