@@ -4116,6 +4116,44 @@ def test_queued_dagruns_stops_creating_when_max_active_is_reached(self, dag_make
41164116 assert session.scalar(select(func.count(DagRun.state)).where(DagRun.state == State.QUEUED)) == 0
41174117 assert orm_dag.next_dagrun_create_after is not None
41184118
4119+ def test_create_dag_runs_flushes_without_retaining_per_task_objects(self, dag_maker, session):
4120+ dag_count = 5
4121+ task_count = 20
4122+ dag_ids = []
4123+ for dag_index in range(dag_count):
4124+ dag_id = f"test_create_dag_runs_flushes_without_retaining_per_task_objects_{dag_index}"
4125+ with dag_maker(dag_id=dag_id, session=session):
4126+ for task_index in range(task_count):
4127+ EmptyOperator(task_id=f"task_{task_index}")
4128+ dag_ids.append(dag_id)
4129+
4130+ scheduler_job = Job()
4131+ self.job_runner = SchedulerJobRunner(job=scheduler_job, executors=[self.null_exec])
4132+
4133+ orm_dags = list(session.scalars(select(DagModel).where(DagModel.dag_id.in_(dag_ids))))
4134+ assert len(orm_dags) == dag_count
4135+ session.flush()
4136+ assert not session.new
4137+ assert not session.dirty
4138+
4139+ self.job_runner._create_dag_runs(orm_dags, session)
4140+
4141+ identity_map_counts = Counter(type(obj) for obj in session.identity_map.values())
4142+ assert not session.new
4143+ assert not session.dirty
4144+ assert identity_map_counts[DagRun] == 0
4145+ assert identity_map_counts[TaskInstance] == 0
4146+ assert (
4147+ session.scalar(select(func.count()).select_from(DagRun).where(DagRun.dag_id.in_(dag_ids)))
4148+ == dag_count
4149+ )
4150+ assert (
4151+ session.scalar(
4152+ select(func.count()).select_from(TaskInstance).where(TaskInstance.dag_id.in_(dag_ids))
4153+ )
4154+ == dag_count * task_count
4155+ )
4156+
41194157 def test_runs_are_created_after_max_active_runs_was_reached(self, dag_maker, session):
41204158 """
41214159 Test that when creating runs once max_active_runs is reached the runs does not stick
0 commit comments