5454)
5555from airflow .models .backfill import Backfill
5656from airflow .models .dag import DAG , DagModel
57- from airflow .models .dag_version import DagVersion
5857from airflow .models .dagbag import DagBag
5958from airflow .models .dagrun import DagRun
6059from airflow .models .dagwarning import DagWarning , DagWarningType
60+ from airflow .models .serialized_dag import SerializedDagModel
6161from airflow .models .taskinstance import SimpleTaskInstance , TaskInstance
6262from airflow .stats import Stats
6363from airflow .ti_deps .dependencies_states import EXECUTION_STATES
@@ -1338,7 +1338,7 @@ def _create_dag_runs(self, dag_models: Collection[DagModel], session: Session) -
13381338 self .log .error ("DAG '%s' not found in serialized_dag table" , dag_model .dag_id )
13391339 continue
13401340
1341- latest_dag_version = DagVersion . get_latest_version (dag .dag_id , session = session )
1341+ dag_hash = self . dagbag . dags_hash . get (dag .dag_id )
13421342
13431343 data_interval = dag .get_next_data_interval (dag_model )
13441344 # Explicitly check if the DagRun already exists. This is an edge case
@@ -1358,7 +1358,7 @@ def _create_dag_runs(self, dag_models: Collection[DagModel], session: Session) -
13581358 data_interval = data_interval ,
13591359 external_trigger = False ,
13601360 session = session ,
1361- dag_version = latest_dag_version ,
1361+ dag_hash = dag_hash ,
13621362 creating_job_id = self .job .id ,
13631363 triggered_by = DagRunTriggeredByType .TIMETABLE ,
13641364 )
@@ -1417,7 +1417,7 @@ def _create_dag_runs_asset_triggered(
14171417 )
14181418 continue
14191419
1420- latest_dag_version = DagVersion . get_latest_version (dag .dag_id , session = session )
1420+ dag_hash = self . dagbag . dags_hash . get (dag .dag_id )
14211421
14221422 # Explicitly check if the DagRun already exists. This is an edge case
14231423 # where a Dag Run is created but `DagModel.next_dagrun` and `DagModel.next_dagrun_create_after`
@@ -1472,7 +1472,7 @@ def _create_dag_runs_asset_triggered(
14721472 state = DagRunState .QUEUED ,
14731473 external_trigger = False ,
14741474 session = session ,
1475- dag_version = latest_dag_version ,
1475+ dag_hash = dag_hash ,
14761476 creating_job_id = self .job .id ,
14771477 triggered_by = DagRunTriggeredByType .ASSET ,
14781478 )
@@ -1750,20 +1750,18 @@ def _verify_integrity_if_dag_changed(self, dag_run: DagRun, session: Session) ->
17501750
17511751 Return True if we determine that DAG still exists.
17521752 """
1753- latest_dag_version = DagVersion .get_latest_version (dag_run .dag_id , session = session )
1754- if TYPE_CHECKING :
1755- assert latest_dag_version
1756- if dag_run .dag_version_id == latest_dag_version .id :
1753+ latest_version = SerializedDagModel .get_latest_version_hash (dag_run .dag_id , session = session )
1754+ if dag_run .dag_hash == latest_version :
17571755 self .log .debug ("DAG %s not changed structure, skipping dagrun.verify_integrity" , dag_run .dag_id )
17581756 return True
17591757
1758+ dag_run .dag_hash = latest_version
1759+
17601760 # Refresh the DAG
17611761 dag_run .dag = self .dagbag .get_dag (dag_id = dag_run .dag_id , session = session )
17621762 if not dag_run .dag :
17631763 return False
17641764
1765- dag_run .dag_version = latest_dag_version
1766-
17671765 # Verify integrity also takes care of session.flush
17681766 dag_run .verify_integrity (session = session )
17691767 return True
@@ -2043,6 +2041,7 @@ def _cleanup_stale_dags(self, session: Session = NEW_SESSION) -> None:
20432041
20442042 In case one of DagProcessors is stopped (in case there are multiple of them
20452043 for different dag folders), its dags are never marked as inactive.
2044+ Also remove dags from SerializedDag table.
20462045 Executed on schedule only if [scheduler]standalone_dag_processor is True.
20472046 """
20482047 self .log .debug ("Checking dags not parsed within last %s seconds." , self ._dag_stale_not_seen_duration )
@@ -2057,6 +2056,7 @@ def _cleanup_stale_dags(self, session: Session = NEW_SESSION) -> None:
20572056 self .log .info ("Found (%d) stales dags not parsed after %s." , len (stale_dags ), limit_lpt )
20582057 for dag in stale_dags :
20592058 dag .is_active = False
2059+ SerializedDagModel .remove_dag (dag_id = dag .dag_id , session = session )
20602060 session .flush ()
20612061
20622062 @provide_session
0 commit comments