Skip to content

Commit

Permalink
Raise AirflowException during initialization if max_active_runs excee…
Browse files Browse the repository at this point in the history
…ds timetable's configured limit
  • Loading branch information
SamWheating authored and potiuk committed Mar 16, 2023
1 parent 48d45cd commit 179b597
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
5 changes: 4 additions & 1 deletion airflow/models/dag.py
Original file line number Diff line number Diff line change
Expand Up @@ -555,7 +555,10 @@ def __init__(
self.max_active_runs = max_active_runs
if self.timetable.active_runs_limit is not None:
if self.timetable.active_runs_limit < self.max_active_runs:
self.max_active_runs = self.timetable.active_runs_limit
raise AirflowException(
f"Invalid max_active_runs: {type(self.timetable)} "
f"requires max_active_runs <= {self.timetable.active_runs_limit}"
)
self.dagrun_timeout = dagrun_timeout
self.sla_miss_callback = sla_miss_callback
if default_view in DEFAULT_VIEW_PRESETS:
Expand Down
8 changes: 7 additions & 1 deletion tests/models/test_dag.py
Original file line number Diff line number Diff line change
Expand Up @@ -2413,14 +2413,20 @@ def test_schedule_dag_param(self, kwargs):
pass

def test_continuous_schedule_interval_limits_max_active_runs(self):
dag = DAG("continuous", start_date=DEFAULT_DATE, schedule_interval="@continuous", max_active_runs=25)

dag = DAG("continuous", start_date=DEFAULT_DATE, schedule_interval="@continuous", max_active_runs=1)
assert isinstance(dag.timetable, ContinuousTimetable)
assert dag.max_active_runs == 1

dag = DAG("continuous", start_date=DEFAULT_DATE, schedule_interval="@continuous", max_active_runs=0)
assert isinstance(dag.timetable, ContinuousTimetable)
assert dag.max_active_runs == 0

with pytest.raises(AirflowException):
dag = DAG(
"continuous", start_date=DEFAULT_DATE, schedule_interval="@continuous", max_active_runs=25
)


class TestDagModel:
def _clean(self):
Expand Down

0 comments on commit 179b597

Please sign in to comment.