RNHTTR commented on a change in pull request #14321:
URL: https://github.com/apache/airflow/pull/14321#discussion_r584217795



##########
File path: airflow/jobs/scheduler_job.py
##########
@@ -1696,10 +1696,18 @@ def _schedule_dag_run(
             and dag.dagrun_timeout
             and dag_run.start_date < timezone.utcnow() - dag.dagrun_timeout
         ):
-            dag_run.state = State.FAILED
-            dag_run.end_date = timezone.utcnow()
-            self.log.info("Run %s of %s has timed-out", dag_run.run_id, 
dag_run.dag_id)
+            dag_run.set_state(State.FAILED)
+            unfinished_task_instances = (
+                session.query(TI)
+                .filter(TI.dag_id == dag_run.dag_id)
+                .filter(TI.execution_date == dag_run.execution_date)
+                .filter(TI.state.in_(State.unfinished))
+            )
+            for task_instance in unfinished_task_instances:
+                task_instance.state = State.SKIPPED

Review comment:
       E.g:
   
   ``` python
   def test_do_schedule_max_active_runs_dag_timed_out(self):
       """Test that tasks are set to a finished state when their DAG times 
out"""
   
       dag = DAG(
           dag_id='test_max_active_run_with_dag_timed_out',
           start_date=DEFAULT_DATE,
           schedule_interval='@once',
           max_active_runs=1,
           catchup=True,
       )
       dag.dagrun_timeout = datetime.timedelta(seconds=1)
   
       with dag:
           task1 = BashOperator(
               task_id='task1',
               bash_command=' for((i=1;i<=600;i+=1)); do sleep "$i";  done',
           )
   
       session = settings.Session()
       dagbag = DagBag(
           dag_folder=os.devnull,
           include_examples=False,
           read_dags_from_db=True,
       )
       
       dagbag.bag_dag(dag=dag, root_dag=dag)
       dagbag.sync_to_db(session=session)
   
       run1 = dag.create_dagrun(
           run_type=DagRunType.SCHEDULED,
           execution_date=DEFAULT_DATE,
           state=State.RUNNING,
           session=session,
       )
       run1_ti = run1.get_task_instance(task1.task_id, session)
       run1_ti.state = State.RUNNING
   
       sleep(1)
   
       run2 = dag.create_dagrun(
           run_type=DagRunType.SCHEDULED,
           execution_date=DEFAULT_DATE + timedelta(seconds=10),
           state=State.RUNNING,
           session=session,
       )
   
       dag.sync_to_db(session=session)
   
       job = SchedulerJob(subdir=os.devnull)
       job.executor = MockExecutor()
       job.processor_agent = mock.MagicMock(spec=DagFileProcessorAgent)
   
       num_queued = job._do_scheduling(session)
   
       assert run1.state == State.FAILED
       assert run1_ti.state == State.SKIPPED
       assert run2.state == State.RUNNING
   
       num_queued = job._do_scheduling(session)
       run2_ti = run2.get_task_instance(task1.task_id, session)
       assert run2_ti.state == State.QUEUED    




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to