A task is ready to run and it is not running. Name every setting that could be stopping it.
Why they ask this
There are five and most candidates know two. Being able to enumerate them in order is the difference between diagnosing a stalled cluster and restarting things hopefully.
Say this
`parallelism` cluster-wide, `max_active_tasks` per DAG, `max_active_runs` per DAG, `max_active_tis_per_dag` per task, and pool slots. Any one of them being full is enough.
The reasoning
From the outside in. `core.parallelism` caps concurrently running task instances across the whole deployment — the global ceiling, and the one people forget exists until it is binding. `core.max_active_tasks_per_dag` (historically `dag_concurrency`) caps running tasks within one DAG, and is overridable per DAG with `max_active_tasks`.
`max_active_runs` caps concurrent dag runs of one DAG. It is the one that makes a DAG look idle during a catchup: runs exist, they are queued, and only N execute. `max_active_tis_per_dag` on a task caps instances of that particular task — the lever for a mapped task that would otherwise fan out to a thousand.
Pools cut across all of it. A pool has a fixed number of slots, a task can request more than one with `pool_slots`, and a task in a full pool waits regardless of how much cluster capacity is free. That is what makes pools the right tool for protecting an external system — a database that tolerates five concurrent connections gets a five-slot pool, and nothing else in the cluster can change that.
The practical consequence: a task can be blocked by any of the five, and the UI does not tell you which. The pool page shows slot usage, the DAG's own settings are in the code, and `parallelism` is in the config. Checking them in that order — pool, then DAG, then global — resolves most stalls, and the answer is almost never 'add more workers', because in four of the five cases the workers are idle.
The answer most people give
"max_active_runs and pools." Those are two of five. A DAG can be well under both and still blocked by cluster-wide `parallelism` or by a per-task cap.
They’ll ask next
Every worker is idle and the task will not start. Which of the five is it?
