Adovo

Data & Analytics

Airflow backfill concurrency one does not prove run order

Test ordering-sensitive backfills under multiple Airflow schedulers.

November 2, 2026

Many backfills are safe in any order. Some carry state forward from one interval to the next. An Airflow issue reports that with multiple schedulers a later backfill DagRun can be promoted before an earlier one, even when max_active_runs is one. The cap limits overlap, but it is not a sequence guarantee.

Classify the backfill dependency

Write down whether interval N needs output or state from interval N minus one. If not, order may be irrelevant. If yes, capture the required sequence and how the DAG enforces it. Do not rely on a concurrency setting to express a data dependency.

Test the real scheduler topology

Create a small backfill in staging with the same scheduler count and run settings. Record creation and actual start times for each logical date. Include retries and paused or failed intervals. A single-scheduler test may miss the reported race.

Make sequence explicit

Use dependency checks or a controlled serial driver when the business outcome requires order. Reconcile output after the run and restart from the last verified interval on failure. Track the upstream issue and remove the workaround only after the target release passes your ordering test.

Adovo’s view

Concurrency controls capacity; dependencies control meaning. When one interval consumes the previous interval’s result, encode that relationship directly. A one-run cap can keep the cluster calm while still putting the wrong run first.

Continue exploring

Data & Analytics

Apache AirflowDAG deployment

Airflow fail-fast DAG changes can trap a scheduler

Gate task removals and renames in active fail-fast DAG runs.

Read more

Data & Analytics

Apache AirflowSecrets

An Airflow JSON Variable edit can overwrite a masked secret

Protect credentials when editing JSON Variables in the Airflow UI.

Read more

Data & Analytics

dbtIncremental Models

A dbt incremental run replaces a production table with empty data

An unexpected initial-build path can turn an incremental model run into a table replacement. Protect row counts and rebuild authorization while retaining managed schema evolution.

Read more
Explore data and analytics services →